Compare commits

..

8 Commits

Author SHA1 Message Date
Kalista Payne 0078d8f2b2 5.47.9 2026-05-12 11:38:53 -05:00
Weblate 54ea0aab18 Merge branch 'origin/develop' into Weblate. 2026-05-12 18:36:09 +02:00
Kalista Payne 24b2a5beb8 chore(git): update submodule 2026-05-12 11:34:50 -05:00
Kalista Payne fe9332dff4 fix(typo): missing word in Verdant Page item 2026-05-12 11:26:32 -05:00
Kalista Payne c6582e4c3c Squashed commit of the following:
commit 39e29846dd
Author: Kalista Payne <kalista@habitica.com>
Date:   Wed May 6 22:45:25 2026 -0500

    fix(lint): no-undef

commit 75bbb5a88a
Author: Kalista Payne <kalista@habitica.com>
Date:   Wed May 6 22:24:10 2026 -0500

    fix(paypal): cancel sub when payment skipped
2026-05-12 11:13:08 -05:00
Kalista Payne b4b7980eee Rate limit redux (#15650)
* Improve rate limit handling

* Improve rate limiter options

* Fix lint

* fixed url

---------

Co-authored-by: Phillip Thelen <phillip@thelen.space>
2026-05-12 11:11:00 -05:00
Weblate 6069fbd61f Translated using Weblate (French)
Currently translated at 100.0% (191 of 191 strings)

Translated using Weblate (French)

Currently translated at 100.0% (253 of 253 strings)

Translated using Weblate (Ukrainian)

Currently translated at 74.3% (188 of 253 strings)

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (145 of 145 strings)

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (442 of 442 strings)

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (191 of 191 strings)

Translated using Weblate (Serbian)

Currently translated at 100.0% (15 of 15 strings)

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (871 of 871 strings)

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (202 of 202 strings)

Translated using Weblate (Serbian)

Currently translated at 52.0% (143 of 275 strings)

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (275 of 275 strings)

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (145 of 145 strings)

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (56 of 56 strings)

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (94 of 94 strings)

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (114 of 114 strings)

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (292 of 292 strings)

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (247 of 247 strings)

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (253 of 253 strings)

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (871 of 871 strings)

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (91 of 91 strings)

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (202 of 202 strings)

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (114 of 114 strings)

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (275 of 275 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (247 of 247 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (191 of 191 strings)

Translated using Weblate (Dutch)

Currently translated at 77.0% (215 of 279 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (114 of 114 strings)

Translated using Weblate (Dutch)

Currently translated at 99.2% (130 of 131 strings)

Translated using Weblate (Dutch)

Currently translated at 83.2% (243 of 292 strings)

Translated using Weblate (Dutch)

Currently translated at 86.8% (384 of 442 strings)

Translated using Weblate (Dutch)

Currently translated at 73.0% (2595 of 3551 strings)

Translated using Weblate (Dutch)

Currently translated at 98.9% (189 of 191 strings)

Translated using Weblate (Dutch)

Currently translated at 80.2% (699 of 871 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (91 of 91 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (413 of 413 strings)

Translated using Weblate (Serbian)

Currently translated at 32.3% (54 of 167 strings)

Translated using Weblate (Serbian)

Currently translated at 26.9% (45 of 167 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (871 of 871 strings)

Translated using Weblate (German)

Currently translated at 99.6% (940 of 943 strings)

Translated using Weblate (German)

Currently translated at 99.6% (940 of 943 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (943 of 943 strings)

Translated using Weblate (German)

Currently translated at 85.0% (17 of 20 strings)

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (3551 of 3551 strings)

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (871 of 871 strings)

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (871 of 871 strings)

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (871 of 871 strings)

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (3551 of 3551 strings)

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (871 of 871 strings)

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (3551 of 3551 strings)

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (871 of 871 strings)

Translated using Weblate (Serbian)

Currently translated at 26.9% (45 of 167 strings)

Translated using Weblate (Bulgarian)

Currently translated at 54.6% (515 of 943 strings)

Translated using Weblate (Bulgarian)

Currently translated at 53.7% (507 of 943 strings)

Translated using Weblate (Bulgarian)

Currently translated at 53.4% (504 of 943 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (253 of 253 strings)

Translated using Weblate (Portuguese)

Currently translated at 98.0% (198 of 202 strings)

Translated using Weblate (Bulgarian)

Currently translated at 53.3% (503 of 943 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (253 of 253 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (253 of 253 strings)

Translated using Weblate (Russian)

Currently translated at 96.4% (244 of 253 strings)

Translated using Weblate (Russian)

Currently translated at 96.4% (244 of 253 strings)

Translated using Weblate (Russian)

Currently translated at 91.3% (231 of 253 strings)

Translated using Weblate (Russian)

Currently translated at 91.3% (231 of 253 strings)

Translated using Weblate (Russian)

Currently translated at 86.1% (218 of 253 strings)

Translated using Weblate (Russian)

Currently translated at 86.1% (218 of 253 strings)

Translated using Weblate (Russian)

Currently translated at 85.7% (217 of 253 strings)

Translated using Weblate (Russian)

Currently translated at 85.7% (217 of 253 strings)

Translated using Weblate (Russian)

Currently translated at 84.9% (215 of 253 strings)

Translated using Weblate (Russian)

Currently translated at 84.9% (215 of 253 strings)

Translated using Weblate (Russian)

Currently translated at 84.5% (214 of 253 strings)

Translated using Weblate (Russian)

Currently translated at 84.5% (214 of 253 strings)

Translated using Weblate (Russian)

Currently translated at 84.1% (213 of 253 strings)

Translated using Weblate (Russian)

Currently translated at 84.1% (213 of 253 strings)

Translated using Weblate (Russian)

Currently translated at 83.7% (212 of 253 strings)

Translated using Weblate (Russian)

Currently translated at 83.7% (212 of 253 strings)

Translated using Weblate (Russian)

Currently translated at 83.3% (211 of 253 strings)

Translated using Weblate (Russian)

Currently translated at 83.3% (211 of 253 strings)

Translated using Weblate (Russian)

Currently translated at 82.6% (209 of 253 strings)

Translated using Weblate (Russian)

Currently translated at 81.4% (206 of 253 strings)

Translated using Weblate (Russian)

Currently translated at 81.4% (206 of 253 strings)

Translated using Weblate (Russian)

Currently translated at 81.0% (205 of 253 strings)

Translated using Weblate (Russian)

Currently translated at 81.0% (205 of 253 strings)

Translated using Weblate (Russian)

Currently translated at 80.6% (204 of 253 strings)

Translated using Weblate (Russian)

Currently translated at 80.6% (204 of 253 strings)

Translated using Weblate (Russian)

Currently translated at 80.2% (203 of 253 strings)

Translated using Weblate (Russian)

Currently translated at 80.2% (203 of 253 strings)

Translated using Weblate (Russian)

Currently translated at 79.8% (202 of 253 strings)

Translated using Weblate (Russian)

Currently translated at 79.8% (202 of 253 strings)

Translated using Weblate (Russian)

Currently translated at 79.0% (200 of 253 strings)

Translated using Weblate (Russian)

Currently translated at 79.0% (200 of 253 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (413 of 413 strings)

Co-authored-by: Antonio Lila Rusciano <antoniorusciano2005@gmail.com>
Co-authored-by: Carmen Ruiz Gomez <carmenruizgomez12@gmail.com>
Co-authored-by: Duggu Ghosh <duggu52d@gmail.com>
Co-authored-by: George <dyshlenko2@gmail.com>
Co-authored-by: Kris Fremen <me@krisfremen.com>
Co-authored-by: Lea Sophie Diekmann <dielea2012@gmail.com>
Co-authored-by: Mausam <mausam_b@protonmail.com>
Co-authored-by: Oscar Trente <vincent@lamblot.net>
Co-authored-by: Serhii <serzh.photograf@gmail.com>
Co-authored-by: Stelio Passaris <habitica@stelio.net>
Co-authored-by: Tanishq Saini <tanishqsaini005@gmail.com>
Co-authored-by: Toro Mor <thomas.bizer@gmx.de>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: elsaaa <elsachaton@lavache.com>
Co-authored-by: kran fall <wisal50835@codoteam.com>
Co-authored-by: Павел <goncharovps@gmail.com>
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/sr/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/bg/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/de/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/it/
Translate-URL: https://translate.habitica.com/projects/habitica/challenge/en_GB/
Translate-URL: https://translate.habitica.com/projects/habitica/character/en_GB/
Translate-URL: https://translate.habitica.com/projects/habitica/character/pt/
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/en_GB/
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/nl/
Translate-URL: https://translate.habitica.com/projects/habitica/content/es/
Translate-URL: https://translate.habitica.com/projects/habitica/content/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/death/sr/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/en_GB/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/front/en_GB/
Translate-URL: https://translate.habitica.com/projects/habitica/front/es/
Translate-URL: https://translate.habitica.com/projects/habitica/front/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/front/nl/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/en_GB/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/
Translate-URL: https://translate.habitica.com/projects/habitica/generic/en_GB/
Translate-URL: https://translate.habitica.com/projects/habitica/generic/es/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/en_GB/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/nl/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/en_GB/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/nl/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/en_GB/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/nl/
Translate-URL: https://translate.habitica.com/projects/habitica/pets/en_GB/
Translate-URL: https://translate.habitica.com/projects/habitica/pets/nl/
Translate-URL: https://translate.habitica.com/projects/habitica/quests/en_GB/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/en_GB/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/it/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/nl/
Translate-URL: https://translate.habitica.com/projects/habitica/rebirth/de/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/en_GB/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/sr/
Translate-URL: https://translate.habitica.com/projects/habitica/spells/en_GB/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/nl/
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/en_GB/
Translation: Habitica/Achievements
Translation: Habitica/Backgrounds
Translation: Habitica/Challenge
Translation: Habitica/Character
Translation: Habitica/Communityguidelines
Translation: Habitica/Content
Translation: Habitica/Death
Translation: Habitica/Faq
Translation: Habitica/Front
Translation: Habitica/Gear
Translation: Habitica/Generic
Translation: Habitica/Groups
Translation: Habitica/Limited
Translation: Habitica/Npc
Translation: Habitica/Pets
Translation: Habitica/Quests
Translation: Habitica/Questscontent
Translation: Habitica/Rebirth
Translation: Habitica/Settings
Translation: Habitica/Spells
Translation: Habitica/Subscriber
Translation: Habitica/Tasks
2026-05-12 14:54:18 +02:00
Phillip Thelen 38a591bdd1 Trim group chat messages (#15646)
Co-authored-by: Kalista Payne <sabrecat@gmail.com>
2026-05-07 12:31:43 -05:00
54 changed files with 517 additions and 256 deletions
+2 -2
View File
@@ -1,12 +1,12 @@
{ {
"name": "habitica", "name": "habitica",
"version": "5.47.8", "version": "5.47.9",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "habitica", "name": "habitica",
"version": "5.47.8", "version": "5.47.9",
"hasInstallScript": true, "hasInstallScript": true,
"dependencies": { "dependencies": {
"@babel/core": "^7.22.10", "@babel/core": "^7.22.10",
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "habitica", "name": "habitica",
"description": "A habit tracker app which treats your goals like a Role Playing Game.", "description": "A habit tracker app which treats your goals like a Role Playing Game.",
"version": "5.47.8", "version": "5.47.9",
"main": "./website/server/index.js", "main": "./website/server/index.js",
"dependencies": { "dependencies": {
"@babel/core": "^7.22.10", "@babel/core": "^7.22.10",
+24 -12
View File
@@ -32,7 +32,8 @@ describe('rateLimiter middleware', () => {
it('is disabled when the env var is not defined', () => { it('is disabled when the env var is not defined', () => {
nconfGetStub.withArgs('RATE_LIMITER_ENABLED').returns(undefined); nconfGetStub.withArgs('RATE_LIMITER_ENABLED').returns(undefined);
const attachRateLimiter = requireAgain(pathToRateLimiter).default; const setupRateLimiter = requireAgain(pathToRateLimiter).default;
const attachRateLimiter = setupRateLimiter();
attachRateLimiter(req, res, next); attachRateLimiter(req, res, next);
expect(next).to.have.been.calledOnce; expect(next).to.have.been.calledOnce;
@@ -43,7 +44,8 @@ describe('rateLimiter middleware', () => {
it('is disabled when the env var is an not "true"', () => { it('is disabled when the env var is an not "true"', () => {
nconfGetStub.withArgs('RATE_LIMITER_ENABLED').returns('false'); nconfGetStub.withArgs('RATE_LIMITER_ENABLED').returns('false');
const attachRateLimiter = requireAgain(pathToRateLimiter).default; const setupRateLimiter = requireAgain(pathToRateLimiter).default;
const attachRateLimiter = setupRateLimiter();
attachRateLimiter(req, res, next); attachRateLimiter(req, res, next);
expect(next).to.have.been.calledOnce; expect(next).to.have.been.calledOnce;
@@ -55,7 +57,8 @@ describe('rateLimiter middleware', () => {
it('does not throw when there are available points', async () => { it('does not throw when there are available points', async () => {
nconfGetStub.withArgs('RATE_LIMITER_ENABLED').returns('true'); nconfGetStub.withArgs('RATE_LIMITER_ENABLED').returns('true');
nconfGetStub.withArgs('RATE_LIMITER_IP_COST').returns(1); nconfGetStub.withArgs('RATE_LIMITER_IP_COST').returns(1);
const attachRateLimiter = requireAgain(pathToRateLimiter).default; const setupRateLimiter = requireAgain(pathToRateLimiter).default;
const attachRateLimiter = setupRateLimiter();
await attachRateLimiter(req, res, next); await attachRateLimiter(req, res, next);
expect(next).to.have.been.calledOnce; expect(next).to.have.been.calledOnce;
@@ -77,7 +80,8 @@ describe('rateLimiter middleware', () => {
sandbox.stub(RateLimiterMemory.prototype, 'consume') sandbox.stub(RateLimiterMemory.prototype, 'consume')
.returns(Promise.reject(new Error('Unknown error.'))); .returns(Promise.reject(new Error('Unknown error.')));
const attachRateLimiter = requireAgain(pathToRateLimiter).default; const setupRateLimiter = requireAgain(pathToRateLimiter).default;
const attachRateLimiter = setupRateLimiter();
await attachRateLimiter(req, res, next); await attachRateLimiter(req, res, next);
expect(next).to.have.been.calledOnce; expect(next).to.have.been.calledOnce;
@@ -92,7 +96,8 @@ describe('rateLimiter middleware', () => {
it('does not throw when LIVELINESS_PROBE_KEY is correct', async () => { it('does not throw when LIVELINESS_PROBE_KEY is correct', async () => {
nconfGetStub.withArgs('RATE_LIMITER_ENABLED').returns('true'); nconfGetStub.withArgs('RATE_LIMITER_ENABLED').returns('true');
nconfGetStub.withArgs('LIVELINESS_PROBE_KEY').returns('abc'); nconfGetStub.withArgs('LIVELINESS_PROBE_KEY').returns('abc');
const attachRateLimiter = requireAgain(pathToRateLimiter).default; const setupRateLimiter = requireAgain(pathToRateLimiter).default;
const attachRateLimiter = setupRateLimiter();
req.query.liveliness = 'abc'; req.query.liveliness = 'abc';
await attachRateLimiter(req, res, next); await attachRateLimiter(req, res, next);
@@ -107,7 +112,8 @@ describe('rateLimiter middleware', () => {
nconfGetStub.withArgs('RATE_LIMITER_ENABLED').returns('true'); nconfGetStub.withArgs('RATE_LIMITER_ENABLED').returns('true');
nconfGetStub.withArgs('LIVELINESS_PROBE_KEY').returns('abc'); nconfGetStub.withArgs('LIVELINESS_PROBE_KEY').returns('abc');
nconfGetStub.withArgs('RATE_LIMITER_IP_COST').returns(1); nconfGetStub.withArgs('RATE_LIMITER_IP_COST').returns(1);
const attachRateLimiter = requireAgain(pathToRateLimiter).default; const setupRateLimiter = requireAgain(pathToRateLimiter).default;
const attachRateLimiter = setupRateLimiter();
req.query.liveliness = 'das'; req.query.liveliness = 'das';
await attachRateLimiter(req, res, next); await attachRateLimiter(req, res, next);
@@ -124,7 +130,8 @@ describe('rateLimiter middleware', () => {
nconfGetStub.withArgs('RATE_LIMITER_ENABLED').returns('true'); nconfGetStub.withArgs('RATE_LIMITER_ENABLED').returns('true');
nconfGetStub.withArgs('LIVELINESS_PROBE_KEY').returns(undefined); nconfGetStub.withArgs('LIVELINESS_PROBE_KEY').returns(undefined);
nconfGetStub.withArgs('RATE_LIMITER_IP_COST').returns(1); nconfGetStub.withArgs('RATE_LIMITER_IP_COST').returns(1);
const attachRateLimiter = requireAgain(pathToRateLimiter).default; const setupRateLimiter = requireAgain(pathToRateLimiter).default;
const attachRateLimiter = setupRateLimiter();
await attachRateLimiter(req, res, next); await attachRateLimiter(req, res, next);
@@ -140,7 +147,8 @@ describe('rateLimiter middleware', () => {
nconfGetStub.withArgs('RATE_LIMITER_ENABLED').returns('true'); nconfGetStub.withArgs('RATE_LIMITER_ENABLED').returns('true');
nconfGetStub.withArgs('LIVELINESS_PROBE_KEY').returns(''); nconfGetStub.withArgs('LIVELINESS_PROBE_KEY').returns('');
nconfGetStub.withArgs('RATE_LIMITER_IP_COST').returns(1); nconfGetStub.withArgs('RATE_LIMITER_IP_COST').returns(1);
const attachRateLimiter = requireAgain(pathToRateLimiter).default; const setupRateLimiter = requireAgain(pathToRateLimiter).default;
const attachRateLimiter = setupRateLimiter();
req.query.liveliness = ''; req.query.liveliness = '';
await attachRateLimiter(req, res, next); await attachRateLimiter(req, res, next);
@@ -156,7 +164,8 @@ describe('rateLimiter middleware', () => {
it('throws when there are no available points remaining', async () => { it('throws when there are no available points remaining', async () => {
nconfGetStub.withArgs('RATE_LIMITER_ENABLED').returns('true'); nconfGetStub.withArgs('RATE_LIMITER_ENABLED').returns('true');
nconfGetStub.withArgs('RATE_LIMITER_IP_COST').returns(1); nconfGetStub.withArgs('RATE_LIMITER_IP_COST').returns(1);
const attachRateLimiter = requireAgain(pathToRateLimiter).default; const setupRateLimiter = requireAgain(pathToRateLimiter).default;
const attachRateLimiter = setupRateLimiter();
// call for 31 times // call for 31 times
for (let i = 0; i < 31; i += 1) { for (let i = 0; i < 31; i += 1) {
@@ -180,7 +189,8 @@ describe('rateLimiter middleware', () => {
it('uses the user id if supplied or the ip address', async () => { it('uses the user id if supplied or the ip address', async () => {
nconfGetStub.withArgs('RATE_LIMITER_ENABLED').returns('true'); nconfGetStub.withArgs('RATE_LIMITER_ENABLED').returns('true');
nconfGetStub.withArgs('RATE_LIMITER_IP_COST').returns(1); nconfGetStub.withArgs('RATE_LIMITER_IP_COST').returns(1);
const attachRateLimiter = requireAgain(pathToRateLimiter).default; const setupRateLimiter = requireAgain(pathToRateLimiter).default;
const attachRateLimiter = setupRateLimiter();
req.ip = 1; req.ip = 1;
await attachRateLimiter(req, res, next); await attachRateLimiter(req, res, next);
@@ -210,7 +220,8 @@ describe('rateLimiter middleware', () => {
it('applies increased cost for registration calls with and without user id', async () => { it('applies increased cost for registration calls with and without user id', async () => {
nconfGetStub.withArgs('RATE_LIMITER_ENABLED').returns('true'); nconfGetStub.withArgs('RATE_LIMITER_ENABLED').returns('true');
nconfGetStub.withArgs('RATE_LIMITER_REGISTRATION_COST').returns(3); nconfGetStub.withArgs('RATE_LIMITER_REGISTRATION_COST').returns(3);
const attachRateLimiter = requireAgain(pathToRateLimiter).default; const setupRateLimiter = requireAgain(pathToRateLimiter).default;
const attachRateLimiter = setupRateLimiter();
req.path = '/api/v4/user/auth/local/register'; req.path = '/api/v4/user/auth/local/register';
req.ip = 1; req.ip = 1;
@@ -241,7 +252,8 @@ describe('rateLimiter middleware', () => {
it('applies increased cost for unauthenticated API calls', async () => { it('applies increased cost for unauthenticated API calls', async () => {
nconfGetStub.withArgs('RATE_LIMITER_ENABLED').returns('true'); nconfGetStub.withArgs('RATE_LIMITER_ENABLED').returns('true');
nconfGetStub.withArgs('RATE_LIMITER_IP_COST').returns(10); nconfGetStub.withArgs('RATE_LIMITER_IP_COST').returns(10);
const attachRateLimiter = requireAgain(pathToRateLimiter).default; const setupRateLimiter = requireAgain(pathToRateLimiter).default;
const attachRateLimiter = setupRateLimiter();
req.ip = 1; req.ip = 1;
await attachRateLimiter(req, res, next); await attachRateLimiter(req, res, next);
+54
View File
@@ -6,6 +6,8 @@ import {
SPAM_MESSAGE_LIMIT, SPAM_MESSAGE_LIMIT,
SPAM_MIN_EXEMPT_CONTRIB_LEVEL, SPAM_MIN_EXEMPT_CONTRIB_LEVEL,
SPAM_WINDOW_LENGTH, SPAM_WINDOW_LENGTH,
MAX_CHAT_COUNT,
MAX_SUBBED_GROUP_CHAT_COUNT,
INVITES_LIMIT, INVITES_LIMIT,
model as Group, model as Group,
} from '../../../../website/server/models/group'; } from '../../../../website/server/models/group';
@@ -18,6 +20,7 @@ import {
import * as email from '../../../../website/server/libs/email'; import * as email from '../../../../website/server/libs/email';
import { TAVERN_ID } from '../../../../website/common/script/constants'; import { TAVERN_ID } from '../../../../website/common/script/constants';
import shared from '../../../../website/common'; import shared from '../../../../website/common';
import { chatModel as Chat } from '../../../../website/server/models/message';
describe('Group Model', () => { describe('Group Model', () => {
let party; let questLeader; let participatingMember; let party; let questLeader; let participatingMember;
@@ -1356,6 +1359,29 @@ describe('Group Model', () => {
}); });
}); });
describe('#getEffectiveChatLimit', () => {
it('returns the correct chat limit', () => {
const group = new Group();
expect(group.getEffectiveChatLimit()).to.eql(MAX_CHAT_COUNT);
});
it('returns the passed limit if it is lower than the max', () => {
const group = new Group();
expect(group.getEffectiveChatLimit(10)).to.eql(10);
});
it('returns the max if the passed limit is higher', () => {
const group = new Group();
expect(group.getEffectiveChatLimit(MAX_CHAT_COUNT + 10)).to.eql(MAX_CHAT_COUNT);
});
it('returns the max for group plans', () => {
const group = new Group();
group.purchased.plan.customerId = '110002222333';
expect(group.getEffectiveChatLimit()).to.eql(MAX_SUBBED_GROUP_CHAT_COUNT);
});
});
describe('#sendChat', () => { describe('#sendChat', () => {
beforeEach(() => { beforeEach(() => {
sandbox.spy(User, 'updateOne'); sandbox.spy(User, 'updateOne');
@@ -1462,6 +1488,34 @@ describe('Group Model', () => {
}); });
}); });
describe('#trimChat', () => {
it('Only checks last message when not enough messages to trim', async () => {
sandbox.spy(Chat, 'find');
sandbox.spy(Chat, 'deleteMany');
await Chat.insertOne({ groupId: party._id, timestamp: new Date() });
await Chat.insertOne({ groupId: party._id, timestamp: new Date() });
await Chat.insertOne({ groupId: party._id, timestamp: new Date() });
await party.trimChat();
expect(Chat.find).to.be.calledOnce;
expect(Chat.deleteMany).to.not.be.called;
expect(await Chat.countDocuments({ groupId: party._id })).to.eql(3);
});
it('Deletes messages over the limit', async () => {
sandbox.spy(Chat, 'find');
sandbox.spy(Chat, 'deleteMany');
await Chat.insertOne({ groupId: party._id, timestamp: new Date() });
await Chat.insertOne({ groupId: party._id, timestamp: new Date() });
await Chat.insertOne({ groupId: party._id, timestamp: new Date() });
await party.trimChat(1);
expect(Chat.find).to.be.calledOnce;
expect(Chat.deleteMany).to.be.calledOnce;
expect(await Chat.countDocuments({ groupId: party._id })).to.eql(1);
});
});
describe('#startQuest', () => { describe('#startQuest', () => {
context('Failure Conditions', () => { context('Failure Conditions', () => {
it('throws an error if group is not a party', async () => { it('throws an error if group is not a party', async () => {
+16 -3
View File
@@ -213,7 +213,7 @@
"backgroundStormyRooftopsNotes": "Промъквайте се върху буреносни покриви.", "backgroundStormyRooftopsNotes": "Промъквайте се върху буреносни покриви.",
"backgroundWindyAutumnText": "Ветровита есен", "backgroundWindyAutumnText": "Ветровита есен",
"backgroundWindyAutumnNotes": "Гонете листа през ветровита есен.", "backgroundWindyAutumnNotes": "Гонете листа през ветровита есен.",
"incentiveBackgrounds": "Комплект едноцветни фонове", "incentiveBackgrounds": "Стандартни фонове",
"backgroundVioletText": "Виолетово", "backgroundVioletText": "Виолетово",
"backgroundVioletNotes": "Енергичен виолетов фон.", "backgroundVioletNotes": "Енергичен виолетов фон.",
"backgroundBlueText": "Синьо", "backgroundBlueText": "Синьо",
@@ -494,7 +494,7 @@
"backgroundSnowglobeText": "Снежна топка", "backgroundSnowglobeText": "Снежна топка",
"backgroundDesertWithSnowNotes": "Бъди свидетел на рядката и мълчалива красота на Снежната пустиня.", "backgroundDesertWithSnowNotes": "Бъди свидетел на рядката и мълчалива красота на Снежната пустиня.",
"backgroundTeaPartyNotes": "Участвай в изискано Чаено парти.", "backgroundTeaPartyNotes": "Участвай в изискано Чаено парти.",
"backgroundButterflyGardenNotes": "Забавлявайте се с опрашителите в Градина на пеперудите", "backgroundButterflyGardenNotes": "Купонясвайте с опрашители в градина за пеперуди",
"backgroundAnimalCloudsText": "Животински облаци", "backgroundAnimalCloudsText": "Животински облаци",
"backgroundButterflyGardenText": "Градина на пеперудите", "backgroundButterflyGardenText": "Градина на пеперудите",
"backgroundWinterNocturneText": "Зимен ноктюрн", "backgroundWinterNocturneText": "Зимен ноктюрн",
@@ -503,5 +503,18 @@
"hideLockedBackgrounds": "Скрий заключените фонове", "hideLockedBackgrounds": "Скрий заключените фонове",
"backgroundSnowglobeNotes": "Разклати Снежната топка и заеми мястото си в микрокосмоса на снежния пейзаж.", "backgroundSnowglobeNotes": "Разклати Снежната топка и заеми мястото си в микрокосмоса на снежния пейзаж.",
"backgroundAmongGiantFlowersText": "Сред гигантски цветя", "backgroundAmongGiantFlowersText": "Сред гигантски цветя",
"backgroundAnimalCloudsNotes": "Използвай въображението си, за да намериш Животни в Облаците." "backgroundAnimalCloudsNotes": "Използвай въображението си, за да намериш Животни в Облаците.",
"backgroundSucculentGardenNotes": "",
"backgroundSucculentGardenText": "Градина със сукуленти",
"backgroundHotAirBalloonText": "горещ въздух балон",
"backgroundHeatherFieldText": "пирен поле",
"backgroundRainyBarnyardText": "Дъждовен фермерски двор",
"backgroundRelaxationRiverText": "Релаксация Река",
"backgroundFlyingOverGlacierNotes": "",
"backgroundUnderwaterRuinsText": "Подводен Руини",
"backgroundBeachCabanaText": "Плаж Кабана",
"backgroundSaltLakeText": "Сол Езеро",
"backgroundWintryCastleText": "Зимен Замък",
"backgroundVikingShipText": "Викинг Кораб",
"backgroundCampingOutText": "Къмпинг Навън"
} }
+4 -1
View File
@@ -935,5 +935,8 @@
"backgroundWaterfallWithRainbowText": "Wasserfall mit Regenbogen", "backgroundWaterfallWithRainbowText": "Wasserfall mit Regenbogen",
"backgroundWaterfallWithRainbowNotes": "Bewundere die atemberaubende Schönheit eines Wasserfalls mit Regenbogen.", "backgroundWaterfallWithRainbowNotes": "Bewundere die atemberaubende Schönheit eines Wasserfalls mit Regenbogen.",
"backgrounds042026": "SET 143: Veröffentlicht im April 2026", "backgrounds042026": "SET 143: Veröffentlicht im April 2026",
"backgrounds052026": "SET 144: Veröffentlicht im Mai 2026" "backgrounds052026": "SET 144: Veröffentlicht im Mai 2026",
"backgroundRidingACometText": "Ein Kometenritt",
"backgroundRidingACometNotes": "Reise durch das All bei einem Kometenritt!",
"backgroundElvenCitadelText": "Elven Citadel"
} }
+7 -1
View File
@@ -11,5 +11,11 @@
"rebirthPop": "Beginne sofort von vorn mit einem Charakter auf Level 1, aber behalte Erfolge, Sammelgegenstände und Ausrüstung. Deine Aufgaben und ihre Verläufe bleiben erhalten, werden aber auf gelb zurückgesetzt. Deine Strähnen verfallen, außer für Aufgaben, die von aktiven Herausforderungen oder Gruppenplänen stammen. Gold, Erfahrung, Mana und alle Effekte von Fähigkeiten werden entfernt. All das wird sofort in Kraft treten.", "rebirthPop": "Beginne sofort von vorn mit einem Charakter auf Level 1, aber behalte Erfolge, Sammelgegenstände und Ausrüstung. Deine Aufgaben und ihre Verläufe bleiben erhalten, werden aber auf gelb zurückgesetzt. Deine Strähnen verfallen, außer für Aufgaben, die von aktiven Herausforderungen oder Gruppenplänen stammen. Gold, Erfahrung, Mana und alle Effekte von Fähigkeiten werden entfernt. All das wird sofort in Kraft treten.",
"rebirthName": "Sphäre der Wiedergeburt", "rebirthName": "Sphäre der Wiedergeburt",
"rebirthComplete": "Du wurdest wiedergeboren!", "rebirthComplete": "Du wurdest wiedergeboren!",
"nextFreeRebirth": "<strong><%= days %> Tage</strong> bis zur <strong>KOSTENLOSEN</strong> Sphäre der Wiedergeburt" "nextFreeRebirth": "<strong><%= days %> Tage</strong> bis zur <strong>KOSTENLOSEN</strong> Sphäre der Wiedergeburt",
"rebirthUnlockedNewItem": "Ort der Wiedergeburt Freigeschaltet",
"rebirthUnlockedOrb": "Ein neues Abendteuer ist bverfügbar!",
"rebirthUnlockedDesc": "Nutze den Ort der Wiedergeburt um ein neues Leben in dein Habitica Abendteuer zu bekommen wenn du das Gefühl hast, alles erreicht zu haben. Du beginnst wieder bei Level 1 und es beginnt wieder von vorne.",
"rebirthNewAchievement": "Neue Auszeichnung",
"rebirthNewAdventure": "Ein neues Abendteuer beginnt nun!",
"rebirthStackInfo": "Diese Auszeichnung kann sich stapeln, jedes Mal, wenn du den Ort der Wiedergeburt nutzt."
} }
+1 -1
View File
@@ -3353,7 +3353,7 @@
"shieldArmoireSoftYellowPillowText": "Soft Yellow Pillow", "shieldArmoireSoftYellowPillowText": "Soft Yellow Pillow",
"shieldArmoireSoftYellowPillowNotes": "The experienced warrior packs a pillow for any expedition. Grow and shine as you consolidate all youve learned during past adventures… even while you nap. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Yellow Loungewear Set (Item 3 of 3).", "shieldArmoireSoftYellowPillowNotes": "The experienced warrior packs a pillow for any expedition. Grow and shine as you consolidate all youve learned during past adventures… even while you nap. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Yellow Loungewear Set (Item 3 of 3).",
"shieldArmoireVerdantBannerText": "Verdant Page Banner", "shieldArmoireVerdantBannerText": "Verdant Page Banner",
"shieldArmoireVerdantBannerNotes": "Wave your banner high to signal friends its time to rally together! Intelligence by <%= int %>. Enchanted Armoire: Verdant Page Set (Item 2 of 2).", "shieldArmoireVerdantBannerNotes": "Wave your banner high to signal friends its time to rally together! Increases Intelligence by <%= int %>. Enchanted Armoire: Verdant Page Set (Item 2 of 2).",
"back": "Back Accessory", "back": "Back Accessory",
"backBase0Text": "No Back Accessory", "backBase0Text": "No Back Accessory",
+3 -3
View File
@@ -40,12 +40,12 @@
"onlyGroupLeaderChal": "Only the group leader can create challenges", "onlyGroupLeaderChal": "Only the group leader can create challenges",
"tavChalsMinPrize": "Prize must be at least 1 Gem for Public Challenges.", "tavChalsMinPrize": "Prize must be at least 1 Gem for Public Challenges.",
"cantAfford": "You can't afford this prize. Purchase more gems or lower the prize amount.", "cantAfford": "You can't afford this prize. Purchase more gems or lower the prize amount.",
"challengeIdRequired": "\"challengeId\" must be a valid UUID.", "challengeIdRequired": "challengeId must be a valid UUID.",
"winnerIdRequired": "\"winnerId\" must be a valid UUID.", "winnerIdRequired": "winnerId must be a valid UUID.",
"challengeNotFound": "Challenge not found or you don't have access.", "challengeNotFound": "Challenge not found or you don't have access.",
"onlyLeaderDeleteChal": "Only the challenge leader can delete it.", "onlyLeaderDeleteChal": "Only the challenge leader can delete it.",
"onlyLeaderUpdateChal": "Only the challenge leader can update it.", "onlyLeaderUpdateChal": "Only the challenge leader can update it.",
"winnerNotFound": "Winner with id \"<%= userId %>\" not found or not part of the challenge.", "winnerNotFound": "Winner with id <%= userId %> not found or not part of the challenge.",
"onlyChalLeaderEditTasks": "Tasks belonging to a challenge can only be edited by the leader.", "onlyChalLeaderEditTasks": "Tasks belonging to a challenge can only be edited by the leader.",
"userAlreadyInChallenge": "User is already participating in this challenge.", "userAlreadyInChallenge": "User is already participating in this challenge.",
"cantOnlyUnlinkChalTask": "Only broken challenges tasks can be un-linked.", "cantOnlyUnlinkChalTask": "Only broken challenges tasks can be un-linked.",
+5 -5
View File
@@ -56,11 +56,11 @@
"autoEquipBattleGear": "Auto-equip new gear", "autoEquipBattleGear": "Auto-equip new gear",
"costume": "Costume", "costume": "Costume",
"useCostume": "Use Costume", "useCostume": "Use Costume",
"costumePopoverText": "Select \"Use Costume\" to equip items to your avatar without affecting the Stats from your Battle Gear! This means that you can dress up your avatar in whatever outfit you like while still having your best Battle Gear equipped.", "costumePopoverText": "Select Use Costume to equip items to your avatar without affecting the Stats from your Battle Gear! This means that you can dress up your avatar in whatever outfit you like while still having your best Battle Gear equipped.",
"autoEquipPopoverText": "Select this option to automatically equip gear as soon as you purchase it.", "autoEquipPopoverText": "Select this option to automatically equip gear as soon as you purchase it.",
"costumeDisabled": "You have disabled your costume.", "costumeDisabled": "You have disabled your costume.",
"gearAchievement": "You have earned the \"Ultimate Gear\" Achievement for upgrading to the maximum gear set for a class! You have attained the following complete sets:", "gearAchievement": "You have earned the Ultimate Gear Achievement for upgrading to the maximum gear set for a class! You have attained the following complete sets:",
"gearAchievementNotification": "You have earned the \"Ultimate Gear\" Achievement for upgrading to the maximum gear set for a class!", "gearAchievementNotification": "You have earned the Ultimate Gear Achievement for upgrading to the maximum gear set for a class!",
"moreGearAchievements": "To attain more Ultimate Gear badges, change classes on <a href='/user/settings/site' target='_blank'>the Settings &gt; Site page</a> and buy your new class's gear!", "moreGearAchievements": "To attain more Ultimate Gear badges, change classes on <a href='/user/settings/site' target='_blank'>the Settings &gt; Site page</a> and buy your new class's gear!",
"armoireUnlocked": "For more equipment, check out the <strong>Enchanted Armoire!</strong> Click on the Enchanted Armoire Reward for a random chance at special Equipment! It may also give you random XP or food items.", "armoireUnlocked": "For more equipment, check out the <strong>Enchanted Armoire!</strong> Click on the Enchanted Armoire Reward for a random chance at special Equipment! It may also give you random XP or food items.",
"ultimGearName": "Ultimate Gear—<%= ultClass %>", "ultimGearName": "Ultimate Gear—<%= ultClass %>",
@@ -86,7 +86,7 @@
"noMoreAllocate": "Now that you've hit level 100, you won't gain any more Stat Points. You can continue levelling up, or start a new adventure at level 1 by using the <a href='/shops/market'>Orb of Rebirth</a>.", "noMoreAllocate": "Now that you've hit level 100, you won't gain any more Stat Points. You can continue levelling up, or start a new adventure at level 1 by using the <a href='/shops/market'>Orb of Rebirth</a>.",
"stats": "Stats", "stats": "Stats",
"strength": "Strength", "strength": "Strength",
"strText": "Strength increases the chance of random \"critical hits\" and the Gold, Experience, and drop chance boost from them. It also helps deal damage to boss monsters.", "strText": "Strength increases the chance of random critical hits and the Gold, Experience, and drop chance boost from them. It also helps deal damage to boss monsters.",
"constitution": "Constitution", "constitution": "Constitution",
"conText": "Constitution reduces the damage you take from negative Habits and missed Dailies.", "conText": "Constitution reduces the damage you take from negative Habits and missed Dailies.",
"perception": "Perception", "perception": "Perception",
@@ -122,7 +122,7 @@
"taskAllocationPop": "Assigns points based on the Strength, Intelligence, Constitution, and Perception categories associated with the tasks you complete", "taskAllocationPop": "Assigns points based on the Strength, Intelligence, Constitution, and Perception categories associated with the tasks you complete",
"distributePoints": "Distribute Unallocated Points", "distributePoints": "Distribute Unallocated Points",
"distributePointsPop": "Assigns all unallocated Stat Points according to the selected allocation scheme.", "distributePointsPop": "Assigns all unallocated Stat Points according to the selected allocation scheme.",
"warriorText": "Warriors score more and better \"critical hits\", which randomly give bonus Gold, Experience, and drop chance for scoring a task. They also deal heavy damage to boss monsters. Play a Warrior if you find motivation from unpredictable jackpot-style rewards, or want to dish out the hurt in boss Quests!", "warriorText": "Warriors score more and better critical hits, which randomly give bonus Gold, Experience, and drop chance for scoring a task. They also deal heavy damage to boss monsters. Play a Warrior if you find motivation from unpredictable jackpot-style rewards, or want to dish out the hurt in boss Quests!",
"wizardText": "Mages learn swiftly, gaining Experience and Levels faster than other classes. They also get a great deal of Mana for using special abilities. Play a Mage if you enjoy the tactical game aspects of Habitica, or if you are strongly motivated by levelling up and unlocking advanced features!", "wizardText": "Mages learn swiftly, gaining Experience and Levels faster than other classes. They also get a great deal of Mana for using special abilities. Play a Mage if you enjoy the tactical game aspects of Habitica, or if you are strongly motivated by levelling up and unlocking advanced features!",
"mageText": "Mages learn swiftly, gaining Experience and Levels faster than other classes. They also get a great deal of Mana for using special abilities. Play a Mage if you enjoy the tactical game aspects of Habitica, or if you are strongly motivated by levelling up and unlocking advanced features!", "mageText": "Mages learn swiftly, gaining Experience and Levels faster than other classes. They also get a great deal of Mana for using special abilities. Play a Mage if you enjoy the tactical game aspects of Habitica, or if you are strongly motivated by levelling up and unlocking advanced features!",
"rogueText": "Rogues love to accumulate wealth, gaining more Gold than anyone else, and are adept at finding random items. Their iconic Stealth ability lets them duck the consequences of missed Dailies. Play a Rogue if you find strong motivation from Rewards and Achievements, striving for loot and badges!", "rogueText": "Rogues love to accumulate wealth, gaining more Gold than anyone else, and are adept at finding random items. Their iconic Stealth ability lets them duck the consequences of missed Dailies. Play a Rogue if you find strong motivation from Rewards and Achievements, striving for loot and badges!",
@@ -41,7 +41,7 @@
"commGuidePara056": "Minor Infractions, while discouraged, still have minor consequences. If they continue to occur, they can lead to more severe consequences over time. Minor infractions are typically first time violations of these Guidelines but may include other circumstances.", "commGuidePara056": "Minor Infractions, while discouraged, still have minor consequences. If they continue to occur, they can lead to more severe consequences over time. Minor infractions are typically first time violations of these Guidelines but may include other circumstances.",
"commGuidePara057": "The following are some examples of Minor Infractions. This is not a comprehensive list.", "commGuidePara057": "The following are some examples of Minor Infractions. This is not a comprehensive list.",
"commGuideList07A": "First-time violation of Public Space Guidelines", "commGuideList07A": "First-time violation of Public Space Guidelines",
"commGuideList07B": "Any statements or actions that trigger a \"Please Don't\" from a Staff member. When you are asked not to do something publicly, this in itself can be a consequence. If Staff have to issue many of these corrections to the same person, it may count as a larger infraction", "commGuideList07B": "Any statements or actions that trigger a Please Dont” from a Staff member. When you are asked not to do something publicly, this in itself can be a consequence. If Staff have to issue many of these corrections to the same person, it may count as a larger infraction.",
"commGuidePara057A": "Some posts may be hidden because they contain sensitive information or might give people the wrong idea. Typically this does not count as an infraction, particularly not the first time it happens!", "commGuidePara057A": "Some posts may be hidden because they contain sensitive information or might give people the wrong idea. Typically this does not count as an infraction, particularly not the first time it happens!",
"commGuideHeadingConsequences": "Consequences", "commGuideHeadingConsequences": "Consequences",
"commGuidePara059": "<strong>Community infractions have direct consequences.</strong> Some sample consequences are outlined below.", "commGuidePara059": "<strong>Community infractions have direct consequences.</strong> Some sample consequences are outlined below.",
@@ -61,7 +61,7 @@
"commGuidePara062": "<strong>If you wish to ask questions about your infraction or consequences, apologise, or make a plea for reinstatement, please contact us at <a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a> with your User ID or @username</strong>. It is <strong>your</strong> responsibility to reach out.", "commGuidePara062": "<strong>If you wish to ask questions about your infraction or consequences, apologise, or make a plea for reinstatement, please contact us at <a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a> with your User ID or @username</strong>. It is <strong>your</strong> responsibility to reach out.",
"commGuidePara063": "If you do not understand your consequences or the nature of your infraction, or if you have other questions related to the matter, you can contact the staff to discuss it at <a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a>. Cooperate with any restrictions which have been imposed, and endeavor to meet the requirements to have any penalties lifted.", "commGuidePara063": "If you do not understand your consequences or the nature of your infraction, or if you have other questions related to the matter, you can contact the staff to discuss it at <a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a>. Cooperate with any restrictions which have been imposed, and endeavor to meet the requirements to have any penalties lifted.",
"commGuideHeadingMeet": "Meet the Staff", "commGuideHeadingMeet": "Meet the Staff",
"commGuidePara007": "The Habitica Staff keep the app and sites running and can act as chat moderators. They have purple tags marked with crowns. Their title is \"Heroic\".", "commGuidePara007": "The Habitica Staff keep the app and sites running and can act as chat moderators. They have purple tags marked with crowns. Their title is Heroic.",
"commGuidePara009": "The current Staff Members are (from left to right):", "commGuidePara009": "The current Staff Members are (from left to right):",
"commGuideAKA": "<%= habitName %> aka <%= realName %>", "commGuideAKA": "<%= habitName %> aka <%= realName %>",
"commGuideOnGitHub": "<%= gitHubName %> on GitHub", "commGuideOnGitHub": "<%= gitHubName %> on GitHub",
+9 -9
View File
@@ -26,13 +26,13 @@
"faqQuestion31": "Why did I lose HP when interacting with a non-negative task?", "faqQuestion31": "Why did I lose HP when interacting with a non-negative task?",
"webFaqAnswer31": "If you complete a task and lose HP when you shouldnt have, you encountered a delay while the server was syncing changes made on other platforms. For example, if you use Gold, Mana, or lose HP on the mobile app and then complete a task on the website, the server is simply confirming everything is in sync.", "webFaqAnswer31": "If you complete a task and lose HP when you shouldnt have, you encountered a delay while the server was syncing changes made on other platforms. For example, if you use Gold, Mana, or lose HP on the mobile app and then complete a task on the website, the server is simply confirming everything is in sync.",
"faqQuestion32": "How can I choose a class?", "faqQuestion32": "How can I choose a class?",
"webFaqAnswer32": "All players start as the Warrior class until they reach level 10. Once you reach level 10, youll be given the choice between selecting a new class or continuing as a Warrior.\n\nEach class has different Equipment and Skills. If you don't want to choose a class, you can select \"Opt Out.\" If you choose to opt out, you can always enable the Class System from Settings later.\n\nIf youd like to change your class after Level 10, you can do so by using the Orb of Rebirth. The Orb of Rebirth becomes available in the Market for 6 Gems at level 50 or for free at level 100.\n\nAlternatively, you can change class at any time from Settings for 3 Gems. This will not reset your level like Orb of Rebirth, but it will allow you to re-allocate the skill points youve accumulated as youve levelled up to match your new class.", "webFaqAnswer32": "All players start as the Warrior class until they reach level 10. Once you reach level 10, youll be given the choice between selecting a new class or continuing as a Warrior.\n\nEach class has different Equipment and Skills. If you dont want to choose a class, you can select Opt Out. If you choose to opt out, you can always enable the Class System from Settings later.\n\nIf youd like to change your class after Level 10, you can do so by using the Orb of Rebirth. The Orb of Rebirth becomes available in the Market for 6 Gems at level 50 or for free at level 100.\n\nAlternatively, you can change class at any time from Settings for 3 Gems. This will not reset your level like Orb of Rebirth, but it will allow you to re-allocate the skill points youve accumulated as youve levelled up to match your new class.",
"faqQuestion33": "What is the blue bar that appears after level 10?", "faqQuestion33": "What is the blue bar that appears after level 10?",
"webFaqAnswer33": "After you unlock the Class System, you also unlock Skills that require Mana to be cast. Mana is determined by your INT stat and can be adjusted by Skills and Equipment.", "webFaqAnswer33": "After you unlock the Class System, you also unlock Skills that require Mana to be cast. Mana is determined by your INT stat and can be adjusted by Skills and Equipment.",
"webFaqAnswer34": "Pets like Food that matches their colour. Base Pets are the exception, but all Base Pets like the same item. You can see the specific foods each Pet likes below:\n\n * Base Pets like Meat\n * White Pets like Milk\n * Desert Pets like Potatoes\n * Red Pets like Strawberries\n * Shade Pets like Chocolate\n * Skeleton Pets like Fish\n * Zombie Pets like Rotten Meat\n * Candyfloss Pink Pets like Pink Candyfloss\n * Candyfloss Blue Pets like Blue Candyfloss\n * Golden Pets like Honey", "webFaqAnswer34": "Pets like Food that matches their colour. Base Pets are the exception, but all Base Pets like the same item. You can see the specific foods each Pet likes below:\n\n * Base Pets like Meat\n * White Pets like Milk\n * Desert Pets like Potatoes\n * Red Pets like Strawberries\n * Shade Pets like Chocolate\n * Skeleton Pets like Fish\n * Zombie Pets like Rotten Meat\n * Candyfloss Pink Pets like Pink Candyfloss\n * Candyfloss Blue Pets like Blue Candyfloss\n * Golden Pets like Honey",
"webFaqAnswer35": "Once youve fed your Pet enough to raise it into a Mount, youll need to hatch that type of Pet again to have it in your stable.\n\nTo view Mounts on the mobile apps:\n\n * From the Menu, select “Pets & Mounts” and switch to the Mounts tab\n\nTo view Mounts on the website:\n\n * From the Inventory menu, select “Pets and Mounts” and scroll down to the Mounts section", "webFaqAnswer35": "Once youve fed your Pet enough to raise it into a Mount, youll need to hatch that type of Pet again to have it in your stable.\n\nTo view Mounts on the mobile apps:\n\n * From the Menu, select “Pets & Mounts” and switch to the Mounts tab\n\nTo view Mounts on the website:\n\n * From the Inventory menu, select “Pets and Mounts” and scroll down to the Mounts section",
"faqQuestion36": "How do I change the appearance of my Avatar?", "faqQuestion36": "How do I change the appearance of my Avatar?",
"webFaqAnswer36": "There are endless ways to customise the appearance of your Habitica Avatar! You can change your Avatars body shape, hair style and colour, or skin colour, or add glasses or mobility aids by selecting \"Customise Avatar\" from the menu.\n\nTo customise your Avatar on the mobile apps:\n * From the menu, select “Customise Avatar”\n\nTo customise your Avatar on the website:\n * From the user menu in the navigation, select \"Customise Avatar\"", "webFaqAnswer36": "There are endless ways to customise the appearance of your Habitica Avatar! You can change your Avatars body shape, hair style and colour, or skin colour, or add glasses or mobility aids by selecting Customise Avatar from the menu.\n\nTo customise your Avatar on the mobile apps:\n * From the menu, select “Customise Avatar”\n\nTo customise your Avatar on the website:\n * From the user menu in the navigation, select Customise Avatar",
"faqQuestion37": "Why isnt my Equipment displaying on my Avatar?", "faqQuestion37": "Why isnt my Equipment displaying on my Avatar?",
"webFaqAnswer37": "Check to see if the Costume option is toggled on. If your Avatar is wearing a Costume, that set of Equipment will show instead of your Battle Gear.\n\nTo toggle the Costume on the mobile apps:\n * From the menu, select “Equipment” to find the Costume toggle\n\nTo toggle the Costume on the website:\n * From your Inventory, select “Equipment” and locate the Costume toggle in the Costume tab of the Equipment drawer", "webFaqAnswer37": "Check to see if the Costume option is toggled on. If your Avatar is wearing a Costume, that set of Equipment will show instead of your Battle Gear.\n\nTo toggle the Costume on the mobile apps:\n * From the menu, select “Equipment” to find the Costume toggle\n\nTo toggle the Costume on the website:\n * From your Inventory, select “Equipment” and locate the Costume toggle in the Costume tab of the Equipment drawer",
"faqQuestion38": "Why can't I purchase certain items?", "faqQuestion38": "Why can't I purchase certain items?",
@@ -46,7 +46,7 @@
"faqQuestion43": "How do I take on Quests?", "faqQuestion43": "How do I take on Quests?",
"webFaqAnswer43": "To begin a Quest, you will need to be a member of a Party. Parties can be solo adventures where you challenge Quests alone, or you can invite other Habitica players to tackle Quests at a quicker rate!\n\nChoose a Quest Scroll from your inventory by selecting the “Begin Quest” button from your Party. Complete your tasks as you normally would to progress on the Quest! Youll either build up damage against a monster if youre taking on a Boss Quest, or have a chance to find items if youre taking on a Collection Quest. All pending progress is applied the next day.\n\nWhen you do enough damage or collect all items, the Quest is complete and you will receive your rewards!", "webFaqAnswer43": "To begin a Quest, you will need to be a member of a Party. Parties can be solo adventures where you challenge Quests alone, or you can invite other Habitica players to tackle Quests at a quicker rate!\n\nChoose a Quest Scroll from your inventory by selecting the “Begin Quest” button from your Party. Complete your tasks as you normally would to progress on the Quest! Youll either build up damage against a monster if youre taking on a Boss Quest, or have a chance to find items if youre taking on a Collection Quest. All pending progress is applied the next day.\n\nWhen you do enough damage or collect all items, the Quest is complete and you will receive your rewards!",
"faqQuestion44": "How can I delete Challenge tasks?", "faqQuestion44": "How can I delete Challenge tasks?",
"webFaqAnswer44": "You will need to leave the Challenge or wait for the Challenge to be closed in order to delete the associated tasks. A red megaphone icon implies the Challenge has been closed and a grey megaphone implies the Challenge is still running.\n\nTo delete Challenge tasks on the **Android** app:\n 1. Tap on a task belonging to the Challenge.\n 2. Tap on \"Delete\" in the upper right corner of the screen.\n 3. Choose to remove the Challenge tasks from your task list.\n\nTo delete Challenge tasks on the **iOS** app:\n 1. Find the Challenge task you wish to delete and look at the megaphone icon.\n 2. If the megaphone icon is red, tap on the task and select \"Delete\" at the bottom\n 3. If the megaphone icon is grey, youll need to find the Challenge and leave it to remove the task.\n\nTo delete Challenge tasks on the **website**:\n 1. Find the Challenge task you wish to delete and look at the megaphone icon.\n 2. If the megaphone icon is red, click it then choose to remove the tasks from your task list.\n 3. If the megaphone icon is grey, you'll need to find the Challenge and leave it to remove the task.", "webFaqAnswer44": "You will need to leave the Challenge or wait for the Challenge to be closed in order to delete the associated tasks. A red megaphone icon implies the Challenge has been closed and a grey megaphone implies the Challenge is still running.\n\nTo delete Challenge tasks on the **Android** app:\n 1. Tap on a task belonging to the Challenge.\n 2. Tap on Delete in the upper right corner of the screen.\n 3. Choose to remove the Challenge tasks from your task list.\n\nTo delete Challenge tasks on the **iOS** app:\n 1. Find the Challenge task you wish to delete and look at the megaphone icon.\n 2. If the megaphone icon is red, tap on the task and select Delete at the bottom\n 3. If the megaphone icon is grey, youll need to find the Challenge and leave it to remove the task.\n\nTo delete Challenge tasks on the **website**:\n 1. Find the Challenge task you wish to delete and look at the megaphone icon.\n 2. If the megaphone icon is red, click it then choose to remove the tasks from your task list.\n 3. If the megaphone icon is grey, youll need to find the Challenge and leave it to remove the task.",
"faqQuestion45": "My Avatar transformed into a snowman, starfish, flower, or ghost. How can I change back?", "faqQuestion45": "My Avatar transformed into a snowman, starfish, flower, or ghost. How can I change back?",
"contentFaqTitle": "Habitica Content Release Change FAQ", "contentFaqTitle": "Habitica Content Release Change FAQ",
"contentFaqPara0": "Habitica has so much fun and engaging content to offer, and we want everyone to be able to enjoy it all! Changes are coming to make it easier for new players to get started on their collection as well as for veteran players to complete theirs!", "contentFaqPara0": "Habitica has so much fun and engaging content to offer, and we want everyone to be able to enjoy it all! Changes are coming to make it easier for new players to get started on their collection as well as for veteran players to complete theirs!",
@@ -164,17 +164,17 @@
"faqQuestion49": "How do I find a Party when I'm not in one?", "faqQuestion49": "How do I find a Party when I'm not in one?",
"webFaqAnswer49": "If you want to experience Habitica with others but dont know other players, searching for a Party is your best option! If you already know other players that have a Party, you can share your @username with them to be invited. Alternatively, you can create a new Party and invite them with their @username or e-mail address.\n\nTo create or search for a Party, select “Party” in the navigation menu, then choose the option that works for you.", "webFaqAnswer49": "If you want to experience Habitica with others but dont know other players, searching for a Party is your best option! If you already know other players that have a Party, you can share your @username with them to be invited. Alternatively, you can create a new Party and invite them with their @username or e-mail address.\n\nTo create or search for a Party, select “Party” in the navigation menu, then choose the option that works for you.",
"faqQuestion50": "How does searching for a Party work?", "faqQuestion50": "How does searching for a Party work?",
"webFaqAnswer50": "After selecting \"Look for a Party\", youll be added to a list of players that want to join a Party. Party leaders can view this list and send invitations. Once you receive an invitation, you can accept it from your notifications to join the Party of your choosing!\n\nYou may get multiple invitations to different Parties. However, you can only be a member of one Party at a time.", "webFaqAnswer50": "After selecting Look for a Party, youll be added to a list of players that want to join a Party. Party leaders can view this list and send invitations. Once you receive an invitation, you can accept it from your notifications to join the Party of your choosing!\n\nYou may get multiple invitations to different Parties. However, you can only be a member of one Party at a time.",
"faqQuestion51": "How long can I search for a Party after joining the list?", "faqQuestion51": "How long can I search for a Party after joining the list?",
"webFaqAnswer51": "You will remain in the list until you accept an invite to a Party or dont login for 7 days, whichever comes first. If you log in after being inactive for 7 days, well automatically add you back to the list as long as you don't have a pending invite.", "webFaqAnswer51": "You will remain in the list until you accept an invite to a Party or dont login for 7 days, whichever comes first. If you log in after being inactive for 7 days, well automatically add you back to the list as long as you don't have a pending invite.",
"faqQuestion52": "Can I stop searching for a Party?", "faqQuestion52": "Can I stop searching for a Party?",
"webFaqAnswer52": "If you no longer want to find a Party, you can stop searching at any time.\n\nTo stop searching for a Party on the mobile apps:\n * From the menu, select \"Party\" and tap \"Leave\" at the bottom of the screen.\n\nTo stop searching for a Party on Habiticas website:\n * Select \"Party\" from the navigation and click \"Leave\" in the pop-up.", "webFaqAnswer52": "If you no longer want to find a Party, you can stop searching at any time.\n\nTo stop searching for a Party on the mobile apps:\n * From the menu, select Party and tap Leave at the bottom of the screen.\n\nTo stop searching for a Party on Habiticas website:\n * Select Party from the navigation and click Leave in the pop-up.",
"faqQuestion53": "I have a Party, how do I find more members?", "faqQuestion53": "I have a Party, how do I find more members?",
"webFaqAnswer53": "If you are using Habiticas website, select \"Find Members\" from the Party dropdown. If youre using the Android app, tap \"Find Members\" above your Partys member list. This will display a list of players that are actively looking for a Party and can be invited to join.\n\nTo help find a good fit for your Party, you'll see some information, such as language, class, level, and how many days they have used Habitica. If youd like to chat with someone before sending an invite, you can view their Profile and send a message.", "webFaqAnswer53": "If you are using Habiticas website, select Find Members from the Party dropdown. If youre using the Android app, tap Find Members above your Partys member list. This will display a list of players that are actively looking for a Party and can be invited to join.\n\nTo help find a good fit for your Party, youll see some information, such as language, class, level, and how many days they have used Habitica. If youd like to chat with someone before sending an invite, you can view their Profile and send a message.",
"faqQuestion54": "How many members can I invite to my Party?", "faqQuestion54": "How many members can I invite to my Party?",
"webFaqAnswer54": "Parties have a maximum limit of 30 members and a minimum of 1 member. Pending invites count towards the member count. For example, 29 members and 1 pending invite would count as 30 members. To clear a pending invite, the invited player must accept or decline, or the Party leader must cancel the invite.", "webFaqAnswer54": "Parties have a maximum limit of 30 members and a minimum of 1 member. Pending invites count towards the member count. For example, 29 members and 1 pending invite would count as 30 members. To clear a pending invite, the invited player must accept or decline, or the Party leader must cancel the invite.",
"faqQuestion55": "Can I invite someone I already know?", "faqQuestion55": "Can I invite someone I already know?",
"webFaqAnswer55": "Yes! If you already have a Habitica players username or e-mail address, you can invite them to join your Party. Heres how to send an invite on the different platforms:\n\nTo invite someone on the mobile apps:\n 1. From the menu, select \"Party\" and scroll down to the Members section\n 2. Tap \"Find Members\" then switch to the \"By Invite\" tab\n 3. Enter the usernames or e-mail addresses of the players you want to invite and click \"Send Invite\"\n\nTo invite someone on the website:\n 1. Navigate to your Party and click \"Invite to Party\"\n 2. Enter the usernames or e-mail addresses of the players you want to invite and click \"Send Invites\"", "webFaqAnswer55": "Yes! If you already have a Habitica players username or e-mail address, you can invite them to join your Party. Heres how to send an invite on the different platforms:\n\nTo invite someone on the mobile apps:\n 1. From the menu, select Party and scroll down to the Members section\n 2. Tap Find Members then switch to the By Invite tab\n 3. Enter the usernames or e-mail addresses of the players you want to invite and click Send Invite\n\nTo invite someone on the website:\n 1. Navigate to your Party and click Invite to Party\n 2. Enter the usernames or e-mail addresses of the players you want to invite and click Send Invites",
"faqQuestion56": "How do I cancel a pending invitation to my Party?", "faqQuestion56": "How do I cancel a pending invitation to my Party?",
"webFaqAnswer56": "To cancel a pending invitation on the mobile apps:\n 1. When viewing your Party, scroll down to the bottom of your Member list\n 2. Find the player whose invite you wish to cancel and tap the “Cancel invitation” button.\n\nTo cancel a pending invitation on the website:\n1. Navigate to your Partys member list and switch to the “Invites” tab\n 2. Hover the player whose invite you wish to cancel\n 3. Click the three dots and choose “Cancel Invite”", "webFaqAnswer56": "To cancel a pending invitation on the mobile apps:\n 1. When viewing your Party, scroll down to the bottom of your Member list\n 2. Find the player whose invite you wish to cancel and tap the “Cancel invitation” button.\n\nTo cancel a pending invitation on the website:\n1. Navigate to your Partys member list and switch to the “Invites” tab\n 2. Hover the player whose invite you wish to cancel\n 3. Click the three dots and choose “Cancel Invite”",
"faqQuestion57": "How do I stop unwanted invitations?", "faqQuestion57": "How do I stop unwanted invitations?",
@@ -186,7 +186,7 @@
"webFaqAnswer59": "Habitica Group Plans provide a shared experience by allowing members to easily add, assign, and complete tasks from a shared task board. With features like member roles, status view, and task assigning, Group Plans are great for families or teams of colleagues that have shared goals. Theyre also a great way to keep each other motivated on your journey to fight monsters and improve your life.", "webFaqAnswer59": "Habitica Group Plans provide a shared experience by allowing members to easily add, assign, and complete tasks from a shared task board. With features like member roles, status view, and task assigning, Group Plans are great for families or teams of colleagues that have shared goals. Theyre also a great way to keep each other motivated on your journey to fight monsters and improve your life.",
"faqQuestion60": "How do I get started with my Group Plan?", "faqQuestion60": "How do I get started with my Group Plan?",
"faqQuestion61": "Can other Group Plan members create tasks?", "faqQuestion61": "Can other Group Plan members create tasks?",
"webFaqAnswer61": "Only the Group Plan leader and managers can create shared tasks. If youd like a member to be able to create tasks, then you should promote them to manager.\n\nTo promote a Group Plan member to a manager on the website:\n 1. Navigate to your Group Plan then switch to the \"Group Information\" tab\n 2. View your Member List and click on the dot icon by the member you want to promote\n 3. Select \"Assign Manager\"", "webFaqAnswer61": "Only the Group Plan leader and managers can create shared tasks. If youd like a member to be able to create tasks, then you should promote them to manager.\n\nTo promote a Group Plan member to a manager on the website:\n 1. Navigate to your Group Plan then switch to the Group Information tab\n 2. View your Member List and click on the dot icon by the member you want to promote\n 3. Select Assign Manager",
"faqQuestion62": "How do assigned tasks work?", "faqQuestion62": "How do assigned tasks work?",
"webFaqAnswer62": "Group Plans give you the unique ability to assign shared tasks to other members of your Group Plan. When a shared task is assigned to a member, other members are prevented from completing it.\n\nYou can also assign a task to multiple members. For example, if everyone has to brush their teeth, create a task and assign it to each member. Each member will be able to complete the task and earn their individual rewards. The main task will show as complete once everyone has completed it.", "webFaqAnswer62": "Group Plans give you the unique ability to assign shared tasks to other members of your Group Plan. When a shared task is assigned to a member, other members are prevented from completing it.\n\nYou can also assign a task to multiple members. For example, if everyone has to brush their teeth, create a task and assign it to each member. Each member will be able to complete the task and earn their individual rewards. The main task will show as complete once everyone has completed it.",
"faqQuestion63": "How do unassigned tasks work?", "faqQuestion63": "How do unassigned tasks work?",
@@ -246,7 +246,7 @@
"sunsetFaqPara2": "Habiticas primary purpose is and has always been to provide a gamified task management experience. Taverns and Guilds helped motivate players by helping them find others with similar goals. Some truly wonderful spaces were created and we had a chance to see the community thrive with helpful discussion. As the years passed, we noticed changes in how players use and rely on Habitica. Parties flourished, while Guilds and public spaces were used by less and less of our player base. In an ever changing internet landscape, the resources necessary to maintain these spaces became too disproportionate to the number of people actually participating in them.", "sunsetFaqPara2": "Habiticas primary purpose is and has always been to provide a gamified task management experience. Taverns and Guilds helped motivate players by helping them find others with similar goals. Some truly wonderful spaces were created and we had a chance to see the community thrive with helpful discussion. As the years passed, we noticed changes in how players use and rely on Habitica. Parties flourished, while Guilds and public spaces were used by less and less of our player base. In an ever changing internet landscape, the resources necessary to maintain these spaces became too disproportionate to the number of people actually participating in them.",
"faqQuestion68": "How do I prevent losing HP?", "faqQuestion68": "How do I prevent losing HP?",
"faqQuestion69": "What are character stats?", "faqQuestion69": "What are character stats?",
"webFaqAnswer68": "If you find yourself losing HP often, try some of these tips:\n\n- Pause your Dailies. The \"Pause Damage\" button in Settings will prevent you from losing HP for missed Dailies.\n- Adjust the schedule of your Dailies. By setting them to never be due, you can still complete them for rewards without risking HP loss.\n- Try using class skills:\n\t- Rogues can cast Stealth to prevent damage from missed Dailies\n\t- Warriors can cast Brutal Smash to reduce a Daily's redness, lowering damage taken if missed\n\t- Healers can cast Searing Brightness to reduce Dailies' redness, lowering damage taken if missed", "webFaqAnswer68": "If you find yourself losing HP often, try some of these tips:\n\n- Pause your Dailies. The Pause Damage button in Settings will prevent you from losing HP for missed Dailies.\n- Adjust the schedule of your Dailies. By setting them to never be due, you can still complete them for rewards without risking HP loss.\n- Try using class skills:\n\t- Rogues can cast Stealth to prevent damage from missed Dailies\n\t- Warriors can cast Brutal Smash to reduce a Dailys redness, lowering damage taken if missed\n\t- Healers can cast Searing Brightness to reduce Dailies redness, lowering damage taken if missed",
"faqQuestion70": "What are stat points?", "faqQuestion70": "What are stat points?",
"webFaqAnswer70": "Stat points let you increase your character's core stats. You earn one stat point each time you level up (up to level 100), which you can assign manually or automatically using the Automatic Allocation feature. Stat allocation unlocks with the Class System at level 10.", "webFaqAnswer70": "Stat points let you increase your character's core stats. You earn one stat point each time you level up (up to level 100), which you can assign manually or automatically using the Automatic Allocation feature. Stat allocation unlocks with the Class System at level 10.",
"faqQuestion71": "How does Automatic Allocation work?", "faqQuestion71": "How does Automatic Allocation work?",
+4 -4
View File
@@ -110,7 +110,7 @@
"missingPassword": "Missing password.", "missingPassword": "Missing password.",
"missingNewPassword": "Missing new password.", "missingNewPassword": "Missing new password.",
"invalidEmailDomain": "You cannot register with e-mails with the following domains: <%= domains %>", "invalidEmailDomain": "You cannot register with e-mails with the following domains: <%= domains %>",
"wrongPassword": "Password is incorrect. If you forgot your password, click \"Forgot Password.\"", "wrongPassword": "Password is incorrect. If you forgot your password, click Forgot Password.",
"incorrectDeletePhrase": "Please type <%= magicWord %> in all capital letters to delete your account.", "incorrectDeletePhrase": "Please type <%= magicWord %> in all capital letters to delete your account.",
"notAnEmail": "Invalid e-mail address.", "notAnEmail": "Invalid e-mail address.",
"emailTaken": "E-mail address is already used in an account.", "emailTaken": "E-mail address is already used in an account.",
@@ -122,7 +122,7 @@
"passwordConfirmationMatch": "Password confirmation doesn't match password.", "passwordConfirmationMatch": "Password confirmation doesn't match password.",
"passwordResetPage": "Reset Password", "passwordResetPage": "Reset Password",
"passwordReset": "If we have your e-mail or username on file, instructions for setting a new password have been sent to your e-mail.", "passwordReset": "If we have your e-mail or username on file, instructions for setting a new password have been sent to your e-mail.",
"invalidLoginCredentialsLong": "Your e-mail, username, or password are incorrect. Please try again or use \"Forgot Password\".", "invalidLoginCredentialsLong": "Your e-mail, username, or password are incorrect. Please try again or use Forgot Password.",
"invalidCredentials": "There is no account that uses those credentials.", "invalidCredentials": "There is no account that uses those credentials.",
"accountSuspended": "Your account @<%= username %> has been blocked. For additional information, or to request an appeal, e-mail admin@habitica.com with your Habitica username or User ID.", "accountSuspended": "Your account @<%= username %> has been blocked. For additional information, or to request an appeal, e-mail admin@habitica.com with your Habitica username or User ID.",
"accountSuspendedTitle": "Account has been suspended", "accountSuspendedTitle": "Account has been suspended",
@@ -130,8 +130,8 @@
"cantDetachSocial": "Account lacks another authentication method; can't detach this authentication method.", "cantDetachSocial": "Account lacks another authentication method; can't detach this authentication method.",
"onlySocialAttachLocal": "Local authentication can be added to only a social account.", "onlySocialAttachLocal": "Local authentication can be added to only a social account.",
"invalidReqParams": "Invalid request parameters.", "invalidReqParams": "Invalid request parameters.",
"memberIdRequired": "\"member\" must be a valid UUID.", "memberIdRequired": "member must be a valid UUID.",
"heroIdRequired": "\"heroId\" must be a valid UUID.", "heroIdRequired": "heroId must be a valid UUID.",
"cannotFulfillReq": "This e-mail address is already in use. You can try logging in or use a different e-mail to register. If you need help, reach out to admin@habitica.com.", "cannotFulfillReq": "This e-mail address is already in use. You can try logging in or use a different e-mail to register. If you need help, reach out to admin@habitica.com.",
"modelNotFound": "This model does not exist.", "modelNotFound": "This model does not exist.",
"signUpWithSocial": "Continue with <%= social %>", "signUpWithSocial": "Continue with <%= social %>",
+26 -26
View File
@@ -314,7 +314,7 @@
"weaponArmoireCrystalCrescentStaffText": "Crystal Crescent Staff", "weaponArmoireCrystalCrescentStaffText": "Crystal Crescent Staff",
"weaponArmoireCrystalCrescentStaffNotes": "Summon the power of the crescent moon with this shining staff! Increases Intelligence and Strength by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 3 of 3).", "weaponArmoireCrystalCrescentStaffNotes": "Summon the power of the crescent moon with this shining staff! Increases Intelligence and Strength by <%= attrs %> each. Enchanted Armoire: Crystal Crescent Set (Item 3 of 3).",
"weaponArmoireBlueLongbowText": "Blue Longbow", "weaponArmoireBlueLongbowText": "Blue Longbow",
"weaponArmoireBlueLongbowNotes": "Ready... Aim... Fire! This bow has great range. Increases Perception by <%= per %>, Constitution by <%= con %>, and Strength by <%= str %>. Enchanted Armoire: Iron Archer Set (Item 3 of 3).", "weaponArmoireBlueLongbowNotes": "Ready Aim… Loose! This bow has great range. Increases Perception by <%= per %>, Constitution by <%= con %>, and Strength by <%= str %>. Enchanted Armoire: Iron Archer Set (Item 3 of 3).",
"weaponArmoireGlowingSpearText": "Glowing Spear", "weaponArmoireGlowingSpearText": "Glowing Spear",
"weaponArmoireGlowingSpearNotes": "This spear hypnotises wild tasks so you can attack them. Increases Strength by <%= str %>. Enchanted Armoire: Independent Item.", "weaponArmoireGlowingSpearNotes": "This spear hypnotises wild tasks so you can attack them. Increases Strength by <%= str %>. Enchanted Armoire: Independent Item.",
"weaponArmoireBarristerGavelText": "Barrister Gavel", "weaponArmoireBarristerGavelText": "Barrister Gavel",
@@ -534,7 +534,7 @@
"armorSpecialWinter2016RogueText": "Cocoa Armour", "armorSpecialWinter2016RogueText": "Cocoa Armour",
"armorSpecialWinter2016RogueNotes": "This leather armour keeps you nice and toasty. Is it actually made from cocoa? You'll never tell. Increases Perception by <%= per %>. Limited Edition 2015-2016 Winter Gear.", "armorSpecialWinter2016RogueNotes": "This leather armour keeps you nice and toasty. Is it actually made from cocoa? You'll never tell. Increases Perception by <%= per %>. Limited Edition 2015-2016 Winter Gear.",
"armorSpecialWinter2016WarriorText": "Snowman Suit", "armorSpecialWinter2016WarriorText": "Snowman Suit",
"armorSpecialWinter2016WarriorNotes": "Brr! This padded armour is truly powerful... until it melts. Increases Constitution by <%= con %>. Limited Edition 2015-2016 Winter Gear.", "armorSpecialWinter2016WarriorNotes": "Brr! This padded armour is truly powerful until it melts. Increases Constitution by <%= con %>. Limited Edition 2015-2016 Winter Gear.",
"armorSpecialWinter2016MageText": "Snowboarder Parka", "armorSpecialWinter2016MageText": "Snowboarder Parka",
"armorSpecialWinter2016MageNotes": "The wisest wizard keeps well-bundled in the winter wind. Increases Intelligence by <%= int %>. Limited Edition 2015-2016 Winter Gear.", "armorSpecialWinter2016MageNotes": "The wisest wizard keeps well-bundled in the winter wind. Increases Intelligence by <%= int %>. Limited Edition 2015-2016 Winter Gear.",
"armorSpecialWinter2016HealerText": "Festive Fairy Cloak", "armorSpecialWinter2016HealerText": "Festive Fairy Cloak",
@@ -618,7 +618,7 @@
"armorSpecialSummer2018MageText": "Lionfish Scale Hauberk", "armorSpecialSummer2018MageText": "Lionfish Scale Hauberk",
"armorSpecialSummer2018MageNotes": "Venom magic has a reputation for subtlety. Not so this colourful armour, whose message is clear to beast and task alike: watch out! Increases Intelligence by <%= int %>. Limited Edition 2018 Summer Gear.", "armorSpecialSummer2018MageNotes": "Venom magic has a reputation for subtlety. Not so this colourful armour, whose message is clear to beast and task alike: watch out! Increases Intelligence by <%= int %>. Limited Edition 2018 Summer Gear.",
"armorSpecialSummer2018HealerText": "Merfolk Monarch Robes", "armorSpecialSummer2018HealerText": "Merfolk Monarch Robes",
"armorSpecialSummer2018HealerNotes": "These cerulean vestments reveal that you have land-walking feet... well. Not even a monarch can be expected to be perfect. Increases Constitution by <%= con %>. Limited Edition 2018 Summer Gear.", "armorSpecialSummer2018HealerNotes": "These cerulean vestments reveal that you have land-walking feet well. Not even a monarch can be expected to be perfect. Increases Constitution by <%= con %>. Limited Edition 2018 Summer Gear.",
"armorSpecialFall2018RogueText": "Alter Ego Frock Coat", "armorSpecialFall2018RogueText": "Alter Ego Frock Coat",
"armorSpecialFall2018RogueNotes": "Style for the day. Comfort and protection for the night. Increases Perception by <%= per %>. Limited Edition 2018 Autumn Gear.", "armorSpecialFall2018RogueNotes": "Style for the day. Comfort and protection for the night. Increases Perception by <%= per %>. Limited Edition 2018 Autumn Gear.",
"armorSpecialFall2018WarriorText": "Minotaur Platemail", "armorSpecialFall2018WarriorText": "Minotaur Platemail",
@@ -718,7 +718,7 @@
"armorArmoireLunarArmorText": "Soothing Lunar Armour", "armorArmoireLunarArmorText": "Soothing Lunar Armour",
"armorArmoireLunarArmorNotes": "The light of the moon will make you strong and savvy. Increases Strength by <%= str %> and Intelligence by <%= int %>. Enchanted Armoire: Soothing Lunar Set (Item 2 of 3).", "armorArmoireLunarArmorNotes": "The light of the moon will make you strong and savvy. Increases Strength by <%= str %> and Intelligence by <%= int %>. Enchanted Armoire: Soothing Lunar Set (Item 2 of 3).",
"armorArmoireGladiatorArmorText": "Gladiator Armour", "armorArmoireGladiatorArmorText": "Gladiator Armour",
"armorArmoireGladiatorArmorNotes": "To be a gladiator you must be not only cunning... but strong. Increases Perception by <%= per %> and Strength by <%= str %>. Enchanted Armoire: Gladiator Set (Item 2 of 3).", "armorArmoireGladiatorArmorNotes": "To be a gladiator you must be not only cunning but strong. Increases Perception by <%= per %> and Strength by <%= str %>. Enchanted Armoire: Gladiator Set (Item 2 of 3).",
"armorArmoireRancherRobesText": "Rancher Robes", "armorArmoireRancherRobesText": "Rancher Robes",
"armorArmoireRancherRobesNotes": "Wrangle your mounts and round up your pets while wearing these magical Rancher Robes! Increases Strength by <%= str %>, Perception by <%= per %>, and Intelligence by <%= int %>. Enchanted Armoire: Rancher Set (Item 2 of 3).", "armorArmoireRancherRobesNotes": "Wrangle your mounts and round up your pets while wearing these magical Rancher Robes! Increases Strength by <%= str %>, Perception by <%= per %>, and Intelligence by <%= int %>. Enchanted Armoire: Rancher Set (Item 2 of 3).",
"armorArmoireGoldenTogaText": "Golden Toga", "armorArmoireGoldenTogaText": "Golden Toga",
@@ -804,15 +804,15 @@
"armorArmoireJeweledArcherArmorText": "Jewelled Archer Armour", "armorArmoireJeweledArcherArmorText": "Jewelled Archer Armour",
"armorArmoireJeweledArcherArmorNotes": "This finely crafted armour will protect you from projectiles or errant red Dailies! Increases Constitution by <%= con %>. Enchanted Armoire: Jewelled Archer Set (Item 2 of 3).", "armorArmoireJeweledArcherArmorNotes": "This finely crafted armour will protect you from projectiles or errant red Dailies! Increases Constitution by <%= con %>. Enchanted Armoire: Jewelled Archer Set (Item 2 of 3).",
"armorArmoireCoverallsOfBookbindingText": "Coveralls of Bookbinding", "armorArmoireCoverallsOfBookbindingText": "Coveralls of Bookbinding",
"armorArmoireCoverallsOfBookbindingNotes": "Everything you need in a set of coveralls, including pockets for everything. A pair of goggles, loose change, a golden ring... Increases Constitution by <%= con %> and Perception by <%= per %>. Enchanted Armoire: Bookbinder Set (Item 2 of 4).", "armorArmoireCoverallsOfBookbindingNotes": "Everything you need in a set of coveralls, including pockets for everything. A pair of goggles, loose change, a golden ring Increases Constitution by <%= con %> and Perception by <%= per %>. Enchanted Armoire: Bookbinder Set (Item 2 of 4).",
"armorArmoireRobeOfSpadesText": "Robe of Spades", "armorArmoireRobeOfSpadesText": "Robe of Spades",
"armorArmoireRobeOfSpadesNotes": "These luxuriant robes conceal hidden pockets for treasures or weapons—your choice! Increases Strength by <%= str %>. Enchanted Armoire: Ace of Spades Set (Item 2 of 3).", "armorArmoireRobeOfSpadesNotes": "These luxuriant robes conceal hidden pockets for treasures or weapons—your choice! Increases Strength by <%= str %>. Enchanted Armoire: Ace of Spades Set (Item 2 of 3).",
"armorArmoireSoftBlueSuitText": "Soft Blue Suit", "armorArmoireSoftBlueSuitText": "Soft Blue Suit",
"armorArmoireSoftBlueSuitNotes": "Blue is a calming colour. So calming, some even wear this soft outfit to sleep... zZz. Increases Intelligence by <%= int %> and Perception by <%= per %>. Enchanted Armoire: Blue Loungewear Set (Item 2 of 3).", "armorArmoireSoftBlueSuitNotes": "Blue is a calming colour. So calming, some even wear this soft outfit to sleep zZz. Increases Intelligence by <%= int %> and Perception by <%= per %>. Enchanted Armoire: Blue Loungewear Set (Item 2 of 3).",
"armorArmoireSoftGreenSuitText": "Soft Green Suit", "armorArmoireSoftGreenSuitText": "Soft Green Suit",
"armorArmoireSoftGreenSuitNotes": "Green is the most refreshing colour! Ideal for resting those tired eyes... mmm, or even a nap... Increases Constitution and Intelligence by <%= attrs %> each. Enchanted Armoire: Green Loungewear Set (Item 2 of 3).", "armorArmoireSoftGreenSuitNotes": "Green is the most refreshing colour! Ideal for resting those tired eyes mmm, or even a nap Increases Constitution and Intelligence by <%= attrs %> each. Enchanted Armoire: Green Loungewear Set (Item 2 of 3).",
"armorArmoireSoftRedSuitText": "Soft Red Suit", "armorArmoireSoftRedSuitText": "Soft Red Suit",
"armorArmoireSoftRedSuitNotes": "Red is such an invigorating colour. If you need to wake up bright and early, this suit could make the perfect pajamas... Increases Intelligence by <%= int %> and Strength by <%= str %>. Enchanted Armoire: Red Loungewear Set (Item 2 of 3).", "armorArmoireSoftRedSuitNotes": "Red is such an invigorating colour. If you need to wake up bright and early, this suit could make the perfect pyjamas Increases Intelligence by <%= int %> and Strength by <%= str %>. Enchanted Armoire: Red Loungewear Set (Item 2 of 3).",
"armorArmoireScribesRobeText": "Scribe's Robes", "armorArmoireScribesRobeText": "Scribe's Robes",
"armorArmoireScribesRobeNotes": "These velvety robes are woven with inspirational and motivational magic. Increases Perception and Intelligence by <%= attrs %> each. Enchanted Armoire: Scribe Set (Item 1 of 3).", "armorArmoireScribesRobeNotes": "These velvety robes are woven with inspirational and motivational magic. Increases Perception and Intelligence by <%= attrs %> each. Enchanted Armoire: Scribe Set (Item 1 of 3).",
"headgear": "helm", "headgear": "helm",
@@ -902,7 +902,7 @@
"headSpecialYetiText": "Yeti-Tamer Helm", "headSpecialYetiText": "Yeti-Tamer Helm",
"headSpecialYetiNotes": "An adorably fearsome hat. Increases Strength by <%= str %>. Limited Edition 2013-2014 Winter Gear.", "headSpecialYetiNotes": "An adorably fearsome hat. Increases Strength by <%= str %>. Limited Edition 2013-2014 Winter Gear.",
"headSpecialSkiText": "Ski-sassin Helm", "headSpecialSkiText": "Ski-sassin Helm",
"headSpecialSkiNotes": "Keeps the wearer's identity secret... and their face toasty. Increases Perception by <%= per %>. Limited Edition 2013-2014 Winter Gear.", "headSpecialSkiNotes": "Keeps the wearers identity secret and their face toasty. Increases Perception by <%= per %>. Limited Edition 2013-2014 Winter Gear.",
"headSpecialCandycaneText": "Candy Cane Hat", "headSpecialCandycaneText": "Candy Cane Hat",
"headSpecialCandycaneNotes": "This is the most delicious hat in the world. It's also known to appear and disappear mysteriously. Increases Perception by <%= per %>. Limited Edition 2013-2014 Winter Gear.", "headSpecialCandycaneNotes": "This is the most delicious hat in the world. It's also known to appear and disappear mysteriously. Increases Perception by <%= per %>. Limited Edition 2013-2014 Winter Gear.",
"headSpecialSnowflakeText": "Snowflake Crown", "headSpecialSnowflakeText": "Snowflake Crown",
@@ -970,13 +970,13 @@
"headSpecialWinter2016RogueText": "Cocoa Helm", "headSpecialWinter2016RogueText": "Cocoa Helm",
"headSpecialWinter2016RogueNotes": "The protective scarf on this cozy helm is only removed to sip warm winter beverages. Increases Perception by <%= per %>. Limited Edition 2015-2016 Winter Gear.", "headSpecialWinter2016RogueNotes": "The protective scarf on this cozy helm is only removed to sip warm winter beverages. Increases Perception by <%= per %>. Limited Edition 2015-2016 Winter Gear.",
"headSpecialWinter2016WarriorText": "Snowman Cap", "headSpecialWinter2016WarriorText": "Snowman Cap",
"headSpecialWinter2016WarriorNotes": "Brr! This mighty helm is truly powerful... until it melts. Increases Strength by <%= str %>. Limited Edition 2015-2016 Winter Gear.", "headSpecialWinter2016WarriorNotes": "Brr! This mighty helm is truly powerful until it melts. Increases Strength by <%= str %>. Limited Edition 2015-2016 Winter Gear.",
"headSpecialWinter2016MageText": "Snowboarder Hood", "headSpecialWinter2016MageText": "Snowboarder Hood",
"headSpecialWinter2016MageNotes": "Keeps the snow out of your eyes while you're casting spells. Increases Perception by <%= per %>. Limited Edition 2015-2016 Winter Gear.", "headSpecialWinter2016MageNotes": "Keeps the snow out of your eyes while you're casting spells. Increases Perception by <%= per %>. Limited Edition 2015-2016 Winter Gear.",
"headSpecialWinter2016HealerText": "Fairy Wing Helm", "headSpecialWinter2016HealerText": "Fairy Wing Helm",
"headSpecialWinter2016HealerNotes": "Thesewingsfluttersoquicklythattheyblur! Increases Intelligence by <%= int %>. Limited Edition 2015-2016 Winter Gear.", "headSpecialWinter2016HealerNotes": "Thesewingsfluttersoquicklythattheyblur! Increases Intelligence by <%= int %>. Limited Edition 2015-2016 Winter Gear.",
"headSpecialSpring2016RogueText": "Good Doggy Mask", "headSpecialSpring2016RogueText": "Good Doggy Mask",
"headSpecialSpring2016RogueNotes": "Aww, what a cute puppy! Come here and let me pet your head. ...Hey, where did all my Gold go? Increases Perception by <%= per %>. Limited Edition 2016 Spring Gear.", "headSpecialSpring2016RogueNotes": "Aww, what a cute puppy! Come here and let me pet your head. Hey, where did all my Gold go? Increases Perception by <%= per %>. Limited Edition 2016 Spring Gear.",
"headSpecialSpring2016WarriorText": "Mouse Guard Helmet", "headSpecialSpring2016WarriorText": "Mouse Guard Helmet",
"headSpecialSpring2016WarriorNotes": "Never again shall you be bopped on the head! Let them try! Increases Strength by <%= str %>. Limited Edition 2016 Spring Gear.", "headSpecialSpring2016WarriorNotes": "Never again shall you be bopped on the head! Let them try! Increases Strength by <%= str %>. Limited Edition 2016 Spring Gear.",
"headSpecialSpring2016MageText": "Grand Malkin Hat", "headSpecialSpring2016MageText": "Grand Malkin Hat",
@@ -998,7 +998,7 @@
"headSpecialFall2016MageText": "Hood of Wickedness", "headSpecialFall2016MageText": "Hood of Wickedness",
"headSpecialFall2016MageNotes": "Conceal your plotting beneath this shadowy hood. Increases Perception by <%= per %>. Limited Edition 2016 Autumn Gear.", "headSpecialFall2016MageNotes": "Conceal your plotting beneath this shadowy hood. Increases Perception by <%= per %>. Limited Edition 2016 Autumn Gear.",
"headSpecialFall2016HealerText": "Medusa's Crown", "headSpecialFall2016HealerText": "Medusa's Crown",
"headSpecialFall2016HealerNotes": "Woe to anyone who looks you in the eyes... Increases Intelligence by <%= int %>. Limited Edition 2016 Autumn Gear.", "headSpecialFall2016HealerNotes": "Woe to anyone who looks you in the eyes Increases Intelligence by <%= int %>. Limited Edition 2016 Autumn Gear.",
"headSpecialNye2016Text": "Whimsical Party Hat", "headSpecialNye2016Text": "Whimsical Party Hat",
"headSpecialNye2016Notes": "You've received a Whimsical Party Hat! Wear it with pride while ringing in the New Year! Confers no benefit.", "headSpecialNye2016Notes": "You've received a Whimsical Party Hat! Wear it with pride while ringing in the New Year! Confers no benefit.",
"headSpecialWinter2017RogueText": "Frosty Helm", "headSpecialWinter2017RogueText": "Frosty Helm",
@@ -1020,7 +1020,7 @@
"headSpecialSummer2017RogueText": "Sea Dragon Helm", "headSpecialSummer2017RogueText": "Sea Dragon Helm",
"headSpecialSummer2017RogueNotes": "This helm changes colours to help you blend in with your surroundings. Increases Perception by <%= per %>. Limited Edition 2017 Summer Gear.", "headSpecialSummer2017RogueNotes": "This helm changes colours to help you blend in with your surroundings. Increases Perception by <%= per %>. Limited Edition 2017 Summer Gear.",
"headSpecialSummer2017WarriorText": "Sandcastle Helm", "headSpecialSummer2017WarriorText": "Sandcastle Helm",
"headSpecialSummer2017WarriorNotes": "The finest helm anyone could hope to wear... at least, until the tide comes in. Increases Strength by <%= str %>. Limited Edition 2017 Summer Gear.", "headSpecialSummer2017WarriorNotes": "The finest helm anyone could hope to wear at least, until the tide comes in. Increases Strength by <%= str %>. Limited Edition 2017 Summer Gear.",
"headSpecialSummer2017MageText": "Whirlpool Hat", "headSpecialSummer2017MageText": "Whirlpool Hat",
"headSpecialSummer2017MageNotes": "This hat is composed entirely of a swirling, inverted whirlpool. Increases Perception by <%= per %>. Limited Edition 2017 Summer Gear.", "headSpecialSummer2017MageNotes": "This hat is composed entirely of a swirling, inverted whirlpool. Increases Perception by <%= per %>. Limited Edition 2017 Summer Gear.",
"headSpecialSummer2017HealerText": "Crown of Sea Creatures", "headSpecialSummer2017HealerText": "Crown of Sea Creatures",
@@ -1858,7 +1858,7 @@
"armorArmoireAstronomersRobeText": "Astronomer's Robe", "armorArmoireAstronomersRobeText": "Astronomer's Robe",
"armorArmoireBoatingJacketNotes": "Whether you're on a swanky yacht or in a jalopy, you'll be the cat's meow in this jacket and tie. Increases Strength, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Boating Set (Item 1 of 3).", "armorArmoireBoatingJacketNotes": "Whether you're on a swanky yacht or in a jalopy, you'll be the cat's meow in this jacket and tie. Increases Strength, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Boating Set (Item 1 of 3).",
"armorArmoireBoatingJacketText": "Boating Jacket", "armorArmoireBoatingJacketText": "Boating Jacket",
"armorMystery201909Notes": "Your tough exterior is protective, but it's still best to keep an eye out for squirrels... Confers no benefit. September 2019 Subscriber Item.", "armorMystery201909Notes": "Your tough exterior is protective, but its still best to keep an eye out for squirrels Confers no benefit. September 2019 Subscriber Item.",
"armorMystery201908Notes": "These legs were made for dancing! And that's just what they'll do. Confers no benefit. August 2019 Subscriber Item.", "armorMystery201908Notes": "These legs were made for dancing! And that's just what they'll do. Confers no benefit. August 2019 Subscriber Item.",
"armorMystery201908Text": "Footloose Faun Costume", "armorMystery201908Text": "Footloose Faun Costume",
"armorMystery201907Notes": "Stay cool and look cool on even the hottest summer day. Confers no benefit. July 2019 Subscriber Item.", "armorMystery201907Notes": "Stay cool and look cool on even the hottest summer day. Confers no benefit. July 2019 Subscriber Item.",
@@ -1955,7 +1955,7 @@
"headSpecialFall2019HealerText": "Dark Mitre", "headSpecialFall2019HealerText": "Dark Mitre",
"headSpecialSummer2019HealerNotes": "The spiralling structure of this shell will help you hear any cry for help across the seven seas. Increases Intelligence by <%= int %>. Limited Edition 2019 Summer Gear.", "headSpecialSummer2019HealerNotes": "The spiralling structure of this shell will help you hear any cry for help across the seven seas. Increases Intelligence by <%= int %>. Limited Edition 2019 Summer Gear.",
"armorArmoireDuffleCoatNotes": "Travel frosty realms in style with this cosy wool coat. Increases Constitution and Perception by <%= attrs %> each. Enchanted Armoire: Duffle Coat Set (Item 1 of 2).", "armorArmoireDuffleCoatNotes": "Travel frosty realms in style with this cosy wool coat. Increases Constitution and Perception by <%= attrs %> each. Enchanted Armoire: Duffle Coat Set (Item 1 of 2).",
"armorSpecialSummer2019WarriorNotes": "Warriors are known for their sturdy defences. Turtles are known for their thick shells. It's a perfect match! Just... try not to fall over backward, ever. Increases Constitution by <%= con %>. Limited Edition 2019 Summer Gear.", "armorSpecialSummer2019WarriorNotes": "Warriors are known for their sturdy defences. Turtles are known for their thick shells. Its a perfect match! Just try not to fall over backwards, ever. Increases Constitution by <%= con %>. Limited Edition 2019 Summer Gear.",
"armorSpecialSpring2019MageNotes": "These robes gather power from magic resin embedded in the fibres of ancient bark that compose the cloth. Increases Intelligence by <%= int %>. Limited Edition 2019 Spring Gear.", "armorSpecialSpring2019MageNotes": "These robes gather power from magic resin embedded in the fibres of ancient bark that compose the cloth. Increases Intelligence by <%= int %>. Limited Edition 2019 Spring Gear.",
"armorArmoireLayerCakeArmorText": "Layer Cake Armour", "armorArmoireLayerCakeArmorText": "Layer Cake Armour",
"armorArmoireNephriteArmorNotes": "Made from strong steel rings and decorated with jade, this armour will protect you from procrastination! Increases Strength by <%= str %> and Perception by <%= per %>. Enchanted Armoire: Nephrite Archer Set (Item 3 of 3).", "armorArmoireNephriteArmorNotes": "Made from strong steel rings and decorated with jade, this armour will protect you from procrastination! Increases Strength by <%= str %> and Perception by <%= per %>. Enchanted Armoire: Nephrite Archer Set (Item 3 of 3).",
@@ -2048,7 +2048,7 @@
"backMystery202004Text": "Mighty Monarch Wings", "backMystery202004Text": "Mighty Monarch Wings",
"shieldArmoireHobbyHorseNotes": "Ride your handsome hobby-horse steed toward your just Rewards! Increases Perception and Constitution by <%= attrs %> each. Enchanted Armoire: Paper Knight Set (Item 2 of 3).", "shieldArmoireHobbyHorseNotes": "Ride your handsome hobby-horse steed toward your just Rewards! Increases Perception and Constitution by <%= attrs %> each. Enchanted Armoire: Paper Knight Set (Item 2 of 3).",
"shieldArmoireHobbyHorseText": "Hobby Horse", "shieldArmoireHobbyHorseText": "Hobby Horse",
"armorArmoireBoxArmorNotes": "Box Armour: It fits, therefore you sits... uh, therefore you wear it into battle, like the bold knight you are! Increases Perception and Constitution by <%= attrs %> each. Enchanted Armoire: Paper Knight Set (Item 3 of 3).", "armorArmoireBoxArmorNotes": "Box Armour: It fits, therefore you sits uh, therefore you wear it into battle, like the bold knight you are! Increases Perception and Constitution by <%= attrs %> each. Enchanted Armoire: Paper Knight Set (Item 3 of 3).",
"armorArmoireBoxArmorText": "Box Armour", "armorArmoireBoxArmorText": "Box Armour",
"weaponArmoirePaperCutterNotes": "This may not look fearsome, but have you never had a papercut? Increases Strength by <%= str %>. Enchanted Armoire: Paper Knight Set (Item 1 of 3).", "weaponArmoirePaperCutterNotes": "This may not look fearsome, but have you never had a papercut? Increases Strength by <%= str %>. Enchanted Armoire: Paper Knight Set (Item 1 of 3).",
"weaponArmoirePaperCutterText": "Paper Cutter", "weaponArmoirePaperCutterText": "Paper Cutter",
@@ -2062,7 +2062,7 @@
"headArmoireFiddlersCapText": "Fiddler's Cap", "headArmoireFiddlersCapText": "Fiddler's Cap",
"armorArmoireFiddlersCoatNotes": "A practical outfit to give you plenty of room to move! Increases Constitution by <%= con %>. Enchanted Armoire: Fiddler Set (Item 2 of 4).", "armorArmoireFiddlersCoatNotes": "A practical outfit to give you plenty of room to move! Increases Constitution by <%= con %>. Enchanted Armoire: Fiddler Set (Item 2 of 4).",
"armorArmoireFiddlersCoatText": "Fiddler's Coat", "armorArmoireFiddlersCoatText": "Fiddler's Coat",
"weaponArmoireFiddlersBowNotes": "You can coax music out of anything with this! ...A violin might work best, though. Increases Strength by <%= str %>. Enchanted Armoire: Fiddler Set (Item 3 of 4).", "weaponArmoireFiddlersBowNotes": "You can coax music out of anything with this! A violin might work best, though. Increases Strength by <%= str %>. Enchanted Armoire: Fiddler Set (Item 3 of 4).",
"weaponArmoireFiddlersBowText": "Fiddler's Bow", "weaponArmoireFiddlersBowText": "Fiddler's Bow",
"headMystery202006Notes": "The positive energy of these radiant purple stones will draw the sea's friendliest creatures to your side. Confers no benefit. June 2020 Subscriber Item.", "headMystery202006Notes": "The positive energy of these radiant purple stones will draw the sea's friendliest creatures to your side. Confers no benefit. June 2020 Subscriber Item.",
"headMystery202006Text": "Sugilite Circlet", "headMystery202006Text": "Sugilite Circlet",
@@ -2082,7 +2082,7 @@
"headSpecialSummer2020MageText": "Oarfish Crest", "headSpecialSummer2020MageText": "Oarfish Crest",
"headSpecialSummer2020WarriorNotes": "Trout your strength and skill with this highly visible headgear. Increases Strength by <%= str %>. Limited Edition 2020 Summer Gear.", "headSpecialSummer2020WarriorNotes": "Trout your strength and skill with this highly visible headgear. Increases Strength by <%= str %>. Limited Edition 2020 Summer Gear.",
"headSpecialSummer2020WarriorText": "Flashy Fishy Cap", "headSpecialSummer2020WarriorText": "Flashy Fishy Cap",
"headSpecialSummer2020RogueNotes": "Complete your Rogue-ish disguise with this helm! Maybe you can fool your enemies with your crocodile tears... Increases Perception by <%= per %>. Limited Edition 2020 Summer Gear.", "headSpecialSummer2020RogueNotes": "Complete your Rogue-ish disguise with this helm! Maybe you can fool your enemies with your crocodile tears Increases Perception by <%= per %>. Limited Edition 2020 Summer Gear.",
"headSpecialSummer2020RogueText": "Crocodile Helm", "headSpecialSummer2020RogueText": "Crocodile Helm",
"armorSpecialSummer2020HealerNotes": "You are as patient as the ocean, as strong as the currents, as dependable as the tides. Increases Constitution by <%= con %>. Limited Edition 2020 Summer Gear.", "armorSpecialSummer2020HealerNotes": "You are as patient as the ocean, as strong as the currents, as dependable as the tides. Increases Constitution by <%= con %>. Limited Edition 2020 Summer Gear.",
"armorSpecialSummer2020HealerText": "Regalia of Tumbling Waves", "armorSpecialSummer2020HealerText": "Regalia of Tumbling Waves",
@@ -2170,7 +2170,7 @@
"armorSpecialFall2020RogueText": "Statuesque Armour", "armorSpecialFall2020RogueText": "Statuesque Armour",
"weaponArmoireEnchantersStaffNotes": "The green stones on this staff are filled with the power of change that flows strong through the autumn wind. Increases Perception by <%= per %>. Enchanted Armoire: Autumn Enchanter Set (Item 3 of 4).", "weaponArmoireEnchantersStaffNotes": "The green stones on this staff are filled with the power of change that flows strong through the autumn wind. Increases Perception by <%= per %>. Enchanted Armoire: Autumn Enchanter Set (Item 3 of 4).",
"weaponArmoireEnchantersStaffText": "Enchanter's Staff", "weaponArmoireEnchantersStaffText": "Enchanter's Staff",
"weaponArmoireGuardiansCrookNotes": "This shepherd's crook could come in handy next time you take your Pets for a stroll in the countryside... Increases Strength by <%= str %>. Enchanted Armoire: Guardian of the Grazers Set (Item 2 of 3).", "weaponArmoireGuardiansCrookNotes": "This shepherds crook could come in handy next time you take your Pets for a stroll in the countryside Increases Strength by <%= str %>. Enchanted Armoire: Guardian of the Grazers Set (Item 2 of 3).",
"weaponArmoireGuardiansCrookText": "Guardian's Crook", "weaponArmoireGuardiansCrookText": "Guardian's Crook",
"weaponSpecialFall2020HealerNotes": "Now that your transformation is complete, this remnant of your life as a pupa now serves as the divining rod with which you measure destinies. Increases Intelligence by <%= int %>. Limited Edition 2020 Autumn Gear.", "weaponSpecialFall2020HealerNotes": "Now that your transformation is complete, this remnant of your life as a pupa now serves as the divining rod with which you measure destinies. Increases Intelligence by <%= int %>. Limited Edition 2020 Autumn Gear.",
"weaponSpecialFall2020HealerText": "Cocoon Cane", "weaponSpecialFall2020HealerText": "Cocoon Cane",
@@ -2215,7 +2215,7 @@
"weaponArmoireEveningTeaNotes": "This panacea will help you relax so those big tasks don't look so threatening. Increases Intelligence by <%= int %>. Enchanted Armoire: Dressing Gown Set (Item 3 of 3).", "weaponArmoireEveningTeaNotes": "This panacea will help you relax so those big tasks don't look so threatening. Increases Intelligence by <%= int %>. Enchanted Armoire: Dressing Gown Set (Item 3 of 3).",
"weaponArmoireEveningTeaText": "Cup of Tea", "weaponArmoireEveningTeaText": "Cup of Tea",
"weaponArmoireClubOfClubsNotes": "This stylish club won't tip your hand too early about your intentions toward those sneaky old tasks. Increases Strength by <%= str %>. Enchanted Armoire: Jack of Clubs Set (Item 2 of 3).", "weaponArmoireClubOfClubsNotes": "This stylish club won't tip your hand too early about your intentions toward those sneaky old tasks. Increases Strength by <%= str %>. Enchanted Armoire: Jack of Clubs Set (Item 2 of 3).",
"weaponArmoireClubOfClubsText": "Club of... Clubs", "weaponArmoireClubOfClubsText": "Club of Clubs",
"weaponSpecialWinter2021HealerNotes": "Conduct your battles with a flourish and a flurry! Increases Intelligence by <%= int %>. Limited Edition 2020-2021 Winter Gear.", "weaponSpecialWinter2021HealerNotes": "Conduct your battles with a flourish and a flurry! Increases Intelligence by <%= int %>. Limited Edition 2020-2021 Winter Gear.",
"weaponSpecialWinter2021HealerText": "Flake-Flanged Rod", "weaponSpecialWinter2021HealerText": "Flake-Flanged Rod",
"weaponSpecialWinter2021MageNotes": "This mighty weapon is definitely more than a phase. Channel your energy, focus on the flow of a month, and study time and space. Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2020-2021 Winter Gear.", "weaponSpecialWinter2021MageNotes": "This mighty weapon is definitely more than a phase. Channel your energy, focus on the flow of a month, and study time and space. Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2020-2021 Winter Gear.",
@@ -2438,7 +2438,7 @@
"weaponArmoireRidingBroomNotes": "Run all your most magical errands on this fine broom—or, just take it for a joyride around the neighbourhood. Whee! Increases Strength by <%= str %> and Intelligence by <%= int %>. Enchanted Armoire: Spooky Sorcery Set (Item 1 of 3)", "weaponArmoireRidingBroomNotes": "Run all your most magical errands on this fine broom—or, just take it for a joyride around the neighbourhood. Whee! Increases Strength by <%= str %> and Intelligence by <%= int %>. Enchanted Armoire: Spooky Sorcery Set (Item 1 of 3)",
"armorSpecialSummer2021WarriorText": "Finny Armour", "armorSpecialSummer2021WarriorText": "Finny Armour",
"armorSpecialSummer2023WarriorNotes": "Goldfish Warriors actually have excellent memories because they always keep their Dailies and To Do's organised in lists. Increases Constitution by <%= con %>. Limited Edition 2023 Summer Gear.", "armorSpecialSummer2023WarriorNotes": "Goldfish Warriors actually have excellent memories because they always keep their Dailies and To Do's organised in lists. Increases Constitution by <%= con %>. Limited Edition 2023 Summer Gear.",
"armorSpecialFall2023RogueNotes": "You were lured with the promise of a nice hot soak... Joke's on you! Increases Perception by <%= per %>. Limited Edition 2023 Autumn Gear.", "armorSpecialFall2023RogueNotes": "You were lured with the promise of a nice hot soak Jokes on you! Increases Perception by <%= per %>. Limited Edition 2023 Autumn Gear.",
"armorSpecialFall2023WarriorText": "Video Player Armour", "armorSpecialFall2023WarriorText": "Video Player Armour",
"armorMystery202110Text": "Mossy Gargoyle Armour", "armorMystery202110Text": "Mossy Gargoyle Armour",
"armorArmoireStrawRaincoatNotes": "This woven straw cape will keep you dry and your armour from rusting while on your quest. Just dont venture too near a candle! Increases Constitution by <%= con %>. Enchanted Armoire: Straw Raincoat Set (Item 1 of 2).", "armorArmoireStrawRaincoatNotes": "This woven straw cape will keep you dry and your armour from rusting while on your quest. Just dont venture too near a candle! Increases Constitution by <%= con %>. Enchanted Armoire: Straw Raincoat Set (Item 1 of 2).",
@@ -2618,7 +2618,7 @@
"weaponArmoireMedievalWashboardNotes": "Scrub-a-dub-dub! It's time to apply some elbow grease and get that laundry clean. Increases Strength by <%= str %>. Enchanted Armoire: Medieval Launderer Set (Item 5 of 6).", "weaponArmoireMedievalWashboardNotes": "Scrub-a-dub-dub! It's time to apply some elbow grease and get that laundry clean. Increases Strength by <%= str %>. Enchanted Armoire: Medieval Launderer Set (Item 5 of 6).",
"weaponArmoireHeraldsBuisineNotes": "Any announcement will sound so much better following a fanfare from this trumpet. Increases Strength by <%= str %>. Enchanted Armoire: Herald Set (Item 3 of 4).", "weaponArmoireHeraldsBuisineNotes": "Any announcement will sound so much better following a fanfare from this trumpet. Increases Strength by <%= str %>. Enchanted Armoire: Herald Set (Item 3 of 4).",
"weaponArmoireBuoyantBubblesText": "Buoyant Bubbles", "weaponArmoireBuoyantBubblesText": "Buoyant Bubbles",
"weaponArmoireBuoyantBubblesNotes": "These bubbles just keep on floating forever, somehow... Increases Perception by <%= per %>. Enchanted Armoire: Bubble Bath Set (Item 3 of 4).", "weaponArmoireBuoyantBubblesNotes": "These bubbles just keep on floating forever, somehow Increases Perception by <%= per %>. Enchanted Armoire: Bubble Bath Set (Item 3 of 4).",
"weaponArmoireHeraldsBuisineText": "Herald's Buisine", "weaponArmoireHeraldsBuisineText": "Herald's Buisine",
"weaponArmoireJadeGlaiveText": "Jade Glaive", "weaponArmoireJadeGlaiveText": "Jade Glaive",
"weaponMystery202512Text": "Biscuit Champion's Blade", "weaponMystery202512Text": "Biscuit Champion's Blade",
@@ -2750,7 +2750,7 @@
"armorSpecialSpring2022MageText": "Forsythia Robe", "armorSpecialSpring2022MageText": "Forsythia Robe",
"armorSpecialSpring2022HealerNotes": "Drive away fears and nightmares simply by wearing this green gem garment. Increases Constitution by <%= con %>. Limited Edition 2022 Spring Gear.", "armorSpecialSpring2022HealerNotes": "Drive away fears and nightmares simply by wearing this green gem garment. Increases Constitution by <%= con %>. Limited Edition 2022 Spring Gear.",
"armorSpecialWinter2024MageText": "Narwhal Wizard Robes", "armorSpecialWinter2024MageText": "Narwhal Wizard Robes",
"armorSpecialWinter2023MageNotes": "Just because you have lights on, that doesn't make you a tree! ...maybe some other year. Increases Intelligence by <%= int %>. Limited Edition 2022-2023 Winter Gear.", "armorSpecialWinter2023MageNotes": "Just because you have lights on, that doesnt make you a tree! maybe some other year. Increases Intelligence by <%= int %>. Limited Edition 2022-2023 Winter Gear.",
"armorSpecialWinter2024RogueText": "Snowy Owl Robes", "armorSpecialWinter2024RogueText": "Snowy Owl Robes",
"armorSpecialWinter2024WarriorNotes": "Turns out chocolate, mint, and frosting are stronger materials than youd think. Increases Constitution by <%= con %>. Limited Edition 2023-2024 Winter Gear.", "armorSpecialWinter2024WarriorNotes": "Turns out chocolate, mint, and frosting are stronger materials than youd think. Increases Constitution by <%= con %>. Limited Edition 2023-2024 Winter Gear.",
"armorSpecialWinter2024HealerNotes": "This sparkling block of magic ice is at least protective while you figure out your escape. Increases Constitution by <%= con %>. Limited Edition 2023-2024 Winter Gear.", "armorSpecialWinter2024HealerNotes": "This sparkling block of magic ice is at least protective while you figure out your escape. Increases Constitution by <%= con %>. Limited Edition 2023-2024 Winter Gear.",
@@ -2794,7 +2794,7 @@
"armorSpecialSpring2023MageText": "Moonstone Suit", "armorSpecialSpring2023MageText": "Moonstone Suit",
"armorSpecialSpring2023RogueNotes": "You may only have four limbs to work with, but you can climb and crawl with the greatest of grubs. Increases Perception by <%= per %>. Limited Edition 2023 Spring Gear.", "armorSpecialSpring2023RogueNotes": "You may only have four limbs to work with, but you can climb and crawl with the greatest of grubs. Increases Perception by <%= per %>. Limited Edition 2023 Spring Gear.",
"armorSpecialSpring2023HealerNotes": "A sweep of verdant glory to make you the envy of the Party. Increases Constitution by <%= con %>. Limited Edition 2023 Spring Gear.", "armorSpecialSpring2023HealerNotes": "A sweep of verdant glory to make you the envy of the Party. Increases Constitution by <%= con %>. Limited Edition 2023 Spring Gear.",
"armorSpecialSummer2023RogueNotes": "Gup top! Down low! Too slow... Increases Perception by <%= per %>. Limited Edition 2023 Summer Gear.", "armorSpecialSummer2023RogueNotes": "Gup top! Down low! Too slow Increases Perception by <%= per %>. Limited Edition 2023 Summer Gear.",
"armorSpecialSummer2023MageText": "Coral Robes", "armorSpecialSummer2023MageText": "Coral Robes",
"armorSpecialSummer2023HealerText": "Kelp Kirtle", "armorSpecialSummer2023HealerText": "Kelp Kirtle",
"armorSpecialSummer2023HealerNotes": "Hold fast to your goals and convictions in this elegant green gown. Increases Constitution by <%= con %>. Limited Edition 2023 Summer Gear.", "armorSpecialSummer2023HealerNotes": "Hold fast to your goals and convictions in this elegant green gown. Increases Constitution by <%= con %>. Limited Edition 2023 Summer Gear.",
@@ -2912,7 +2912,7 @@
"armorArmoireSoftWhiteSuitText": "Soft White Suit", "armorArmoireSoftWhiteSuitText": "Soft White Suit",
"headSpecialSummer2022WarriorText": "Waterspout Helm", "headSpecialSummer2022WarriorText": "Waterspout Helm",
"armorArmoireHattersSuitText": "Hatter's Suit", "armorArmoireHattersSuitText": "Hatter's Suit",
"armorArmoireHattersSuitNotes": "Your outfit isnt complete without your lucky green bowtie. Wear this to your next mad tea party. Or pleasant tea party. Or excited tea party. Or... Increases Constitution by <%= con %>. Enchanted Armoire: Hatter Set (Item 2 of 4).", "armorArmoireHattersSuitNotes": "Your outfit isnt complete without your lucky green bowtie. Wear this to your next mad tea party. Or pleasant tea party. Or excited tea party. Or Increases Constitution by <%= con %>. Enchanted Armoire: Hatter Set (Item 2 of 4).",
"armorArmoireCorsairsCoatAndCapeNotes": "Whether youre biding your time on the docks or watching for danger on the open seas, these will surely keep you feeling dry and looking dramatic. Just keep your balance on deck. Increases Constitution by <%= con %>. Enchanted Armoire: Corsair Set (Item 1 of 3)", "armorArmoireCorsairsCoatAndCapeNotes": "Whether youre biding your time on the docks or watching for danger on the open seas, these will surely keep you feeling dry and looking dramatic. Just keep your balance on deck. Increases Constitution by <%= con %>. Enchanted Armoire: Corsair Set (Item 1 of 3)",
"armorArmoireFunnyFoolCostumeText": "Funny Fool Costume", "armorArmoireFunnyFoolCostumeText": "Funny Fool Costume",
"headSpecialSummer2021RogueNotes": "Its bold, bright, and funny. Just like you! Increases Perception by <%= per %>. Limited Edition 2021 Summer Gear.", "headSpecialSummer2021RogueNotes": "Its bold, bright, and funny. Just like you! Increases Perception by <%= per %>. Limited Edition 2021 Summer Gear.",
@@ -2955,7 +2955,7 @@
"armorArmoireGardenersOverallsNotes": "Dont be afraid to work down in the dirt when youre wearing these durable overalls. Increases Constitution by <%= con %>. Enchanted Armoire: Gardener Set (Item 1 of 4).", "armorArmoireGardenersOverallsNotes": "Dont be afraid to work down in the dirt when youre wearing these durable overalls. Increases Constitution by <%= con %>. Enchanted Armoire: Gardener Set (Item 1 of 4).",
"armorArmoireFancyPirateSuitText": "Fancy Pirate Jacket", "armorArmoireFancyPirateSuitText": "Fancy Pirate Jacket",
"armorArmoireSheetGhostCostumeText": "Sheet Ghost Costume", "armorArmoireSheetGhostCostumeText": "Sheet Ghost Costume",
"armorArmoireSheetGhostCostumeNotes": "Boo! This is the scariest costume in all of Habitica, so wear it wisely... and watch your step so you dont trip. Increases Constitution by <%= con %>. Enchanted Armoire: Independent Item.", "armorArmoireSheetGhostCostumeNotes": "Boo! This is the scariest costume in all of Habitica, so wear it wisely and watch your step so you dont trip. Increases Constitution by <%= con %>. Enchanted Armoire: Independent Item.",
"headSpecialSummer2021HealerText": "Parrot Mask", "headSpecialSummer2021HealerText": "Parrot Mask",
"shieldArmoireMedievalLaundryNotes": "Its going to be tough to get this clean, but you already know you can do anything. Increases Perception by <%= per %>. Enchanted Armoire: Medieval Launderer Set (Item 6 of 6).", "shieldArmoireMedievalLaundryNotes": "Its going to be tough to get this clean, but you already know you can do anything. Increases Perception by <%= per %>. Enchanted Armoire: Medieval Launderer Set (Item 6 of 6).",
"armorArmoireStrawRaincoatText": "Straw Raincoat", "armorArmoireStrawRaincoatText": "Straw Raincoat",
+1 -1
View File
@@ -12,7 +12,7 @@
"showLess": "Show Less", "showLess": "Show Less",
"markdownHelpLink": "Markdown formatting help", "markdownHelpLink": "Markdown formatting help",
"bold": "**Bold**", "bold": "**Bold**",
"markdownImageEx": "![mandatory alt text](https://habitica.com/cake.png \"optional mouseover title\")", "markdownImageEx": "![mandatory alt text](https://habitica.com/cake.png optional mouseover title)",
"code": "`code`", "code": "`code`",
"achievements": "Achievements", "achievements": "Achievements",
"basicAchievs": "Basic Achievements", "basicAchievs": "Basic Achievements",
+1 -1
View File
@@ -121,7 +121,7 @@
"partyUpText": "Joined a Party with another person! Have fun battling monsters and supporting each other.", "partyUpText": "Joined a Party with another person! Have fun battling monsters and supporting each other.",
"partyOnText": "Joined a Party with at least four people! Enjoy your increased accountability as you unite with your friends to vanquish your foes!", "partyOnText": "Joined a Party with at least four people! Enjoy your increased accountability as you unite with your friends to vanquish your foes!",
"groupNotFound": "Group not found or you don't have access.", "groupNotFound": "Group not found or you don't have access.",
"groupTypesRequired": "You must supply a valid \"type\" query string.", "groupTypesRequired": "You must supply a valid type query string.",
"questLeaderCannotLeaveGroup": "You cannot leave your Party when you have started a quest. Abort the quest first.", "questLeaderCannotLeaveGroup": "You cannot leave your Party when you have started a quest. Abort the quest first.",
"cannotLeaveWhileActiveQuest": "You cannot leave Party during an active quest. Please leave the quest first.", "cannotLeaveWhileActiveQuest": "You cannot leave Party during an active quest. Please leave the quest first.",
"onlyLeaderCanRemoveMember": "Only the group leader can remove a member!", "onlyLeaderCanRemoveMember": "Only the group leader can remove a member!",
+6 -6
View File
@@ -8,12 +8,12 @@
"aquaticFriends": "Aquatic Friends", "aquaticFriends": "Aquatic Friends",
"aquaticFriendsText": "Got splashed <%= count %> times by party members.", "aquaticFriendsText": "Got splashed <%= count %> times by party members.",
"valentineCard": "Valentine's Day Card", "valentineCard": "Valentine's Day Card",
"valentineCardExplanation": "For enduring such a saccharine poem, you both receive the \"Adoring Friends\" badge!", "valentineCardExplanation": "For enduring such a saccharine poem, you both receive the Adoring Friends badge!",
"valentineCardNotes": "Send a Valentine's Day card to a party member.", "valentineCardNotes": "Send a Valentine's Day card to a party member.",
"valentine0": "\"Roses are red\n\nMy Dailies are blue\n\nI'm happy that I'm\n\nIn a Party with you!\"", "valentine0": "Roses are red\n\nMy Dailies are blue\n\nIm happy that Im\n\nIn a Party with you!",
"valentine1": "\"Roses are red\n\nViolets are nice\n\nLet's get together\n\nAnd fight against Vice!\"", "valentine1": "Roses are red\n\nViolets are nice\n\nLets get together\n\nAnd fight against Vice!",
"valentine2": "\"Roses are red\n\nThis poem style is old\n\nI hope that you like this\n\n'Cause it cost ten Gold.\"", "valentine2": "Roses are red\n\nThis poem style is old\n\nI hope that you like this\n\nCause it cost ten Gold.",
"valentine3": "\"Roses are red\n\nIce Drakes are blue\n\nNo treasure is better\n\nThan time spent with you!\"", "valentine3": "Roses are red\n\nIce Drakes are blue\n\nNo treasure is better\n\nThan time spent with you!",
"valentineCardAchievementTitle": "Adoring Friends", "valentineCardAchievementTitle": "Adoring Friends",
"valentineCardAchievementText": "Aww, you and your friend must really care about each other! Sent or received <%= count %> Valentine's Day cards.", "valentineCardAchievementText": "Aww, you and your friend must really care about each other! Sent or received <%= count %> Valentine's Day cards.",
"polarBear": "Polar Bear", "polarBear": "Polar Bear",
@@ -48,7 +48,7 @@
"cocoaSet": "Cocoa (Rogue)", "cocoaSet": "Cocoa (Rogue)",
"toAndFromCard": "To: <%= toName %>, From: <%= fromName %>", "toAndFromCard": "To: <%= toName %>, From: <%= fromName %>",
"nyeCard": "New Year's Card", "nyeCard": "New Year's Card",
"nyeCardExplanation": "For celebrating the new year together, you both receive the \"Auld Acquaintance\" badge!", "nyeCardExplanation": "For celebrating the new year together, you both receive the Auld Acquaintance badge!",
"nyeCardNotes": "Send a New Year's card to a party member.", "nyeCardNotes": "Send a New Year's card to a party member.",
"seasonalItems": "Seasonal Items", "seasonalItems": "Seasonal Items",
"nyeCardAchievementTitle": "Auld Acquaintance", "nyeCardAchievementTitle": "Auld Acquaintance",
+4 -4
View File
@@ -51,8 +51,8 @@
"shops": "Shops", "shops": "Shops",
"custom": "Custom", "custom": "Custom",
"wishlist": "Wishlist", "wishlist": "Wishlist",
"wrongItemType": "The item type \"<%= type %>\" is not valid.", "wrongItemType": "The item type <%= type %> is not valid.",
"wrongItemPath": "The item path \"<%= path %>\" is not valid.", "wrongItemPath": "The item path <%= path %> is not valid.",
"unpinnedItem": "You unpinned <%= item %>! It will no longer display in your Rewards column.", "unpinnedItem": "You unpinned <%= item %>! It will no longer display in your Rewards column.",
"purchasedItem": "You bought <%= itemName %>", "purchasedItem": "You bought <%= itemName %>",
"ianTextMobile": "Can I interest you in some quest scrolls? Activate them to battle monsters with your Party!", "ianTextMobile": "Can I interest you in some quest scrolls? Activate them to battle monsters with your Party!",
@@ -92,14 +92,14 @@
"skillsTitle": "<%= classStr %> Skills", "skillsTitle": "<%= classStr %> Skills",
"toDo": "To Do", "toDo": "To Do",
"tourStatsPage": "This is your Stats page! Earn achievements by completing the listed tasks.", "tourStatsPage": "This is your Stats page! Earn achievements by completing the listed tasks.",
"tourTavernPage": "Welcome to the Tavern, an all-ages chat room! You can keep your Dailies from hurting you in case of illness or travel by clicking \"Pause Damage\". Come say hi!", "tourTavernPage": "Welcome to the Tavern, an all-ages chat room! You can keep your Dailies from hurting you in case of illness or travel by clicking Pause Damage. Come and say hello!",
"tourPartyPage": "Welcome to your new Party! You can invite other players to your Party by username, e-mail, or from a list of players looking for a Party to earn the exclusive Basi-List Quest Scroll.<br/><br/>Select <a href='/static/faq#parties'>FAQ</a> from the Help dropdown to learn more about how Parties work.", "tourPartyPage": "Welcome to your new Party! You can invite other players to your Party by username, e-mail, or from a list of players looking for a Party to earn the exclusive Basi-List Quest Scroll.<br/><br/>Select <a href='/static/faq#parties'>FAQ</a> from the Help dropdown to learn more about how Parties work.",
"tourChallengesPage": "Challenges are themed task lists created by users! Joining a Challenge will add its tasks to your account. Compete against other users to win Gem prizes!", "tourChallengesPage": "Challenges are themed task lists created by users! Joining a Challenge will add its tasks to your account. Compete against other users to win Gem prizes!",
"tourMarketPage": "Every time you complete a task, you'll have a random chance at receiving an Egg, a Hatching Potion, or a piece of Pet Food. You can also buy these items here.", "tourMarketPage": "Every time you complete a task, you'll have a random chance at receiving an Egg, a Hatching Potion, or a piece of Pet Food. You can also buy these items here.",
"tourHallPage": "Welcome to the Hall of Heroes, where open-source contributors to Habitica are honoured. Whether through code, art, music, writing, or even just helpfulness, they have earned Gems, exclusive Equipment, and prestigious titles. You can contribute to Habitica, too!", "tourHallPage": "Welcome to the Hall of Heroes, where open-source contributors to Habitica are honoured. Whether through code, art, music, writing, or even just helpfulness, they have earned Gems, exclusive Equipment, and prestigious titles. You can contribute to Habitica, too!",
"tourPetsPage": "Welcome to the stable! Every time you complete a task, you'll have a random chance at receiving an Egg or a Hatching Potion to hatch Pets. When you hatch a Pet, it will appear here! Click a Pet's image to add it to your Avatar. Feed them with the Pet Food you find and they'll grow into hardy Mounts.", "tourPetsPage": "Welcome to the stable! Every time you complete a task, you'll have a random chance at receiving an Egg or a Hatching Potion to hatch Pets. When you hatch a Pet, it will appear here! Click a Pet's image to add it to your Avatar. Feed them with the Pet Food you find and they'll grow into hardy Mounts.",
"tourMountsPage": "Once you've fed a pet enough food to turn it into a mount, it will appear here. Click a mount to saddle up!", "tourMountsPage": "Once you've fed a pet enough food to turn it into a mount, it will appear here. Click a mount to saddle up!",
"tourEquipmentPage": "This is where your Equipment is stored! Your Battle Gear affects your Stats. If you want to show different Equipment on your avatar without changing your Stats, click \"Enable Costume.\"", "tourEquipmentPage": "This is where your Equipment is stored! Your Battle Gear affects your Stats. If you want to show different Equipment on your avatar without changing your Stats, click Enable Costume.",
"equipmentAlreadyOwned": "You already own that piece of equipment", "equipmentAlreadyOwned": "You already own that piece of equipment",
"tourOkay": "Okay!", "tourOkay": "Okay!",
"tourSplendid": "Splendid!", "tourSplendid": "Splendid!",
+3 -3
View File
@@ -46,19 +46,19 @@
"dropsExplanationEggs": "Spend Gems to get eggs more quickly, if you don't want to wait for standard eggs to drop, or to repeat Quests to earn Quest eggs. <a href=\"https://habitica.fandom.com/wiki/Drops\">Learn more about the drop system.</a>", "dropsExplanationEggs": "Spend Gems to get eggs more quickly, if you don't want to wait for standard eggs to drop, or to repeat Quests to earn Quest eggs. <a href=\"https://habitica.fandom.com/wiki/Drops\">Learn more about the drop system.</a>",
"premiumPotionNoDropExplanation": "Magic Hatching Potions cannot be used on eggs received from Quests. The only way to get Magic Hatching Potions is by buying them below, not from random drops.", "premiumPotionNoDropExplanation": "Magic Hatching Potions cannot be used on eggs received from Quests. The only way to get Magic Hatching Potions is by buying them below, not from random drops.",
"beastMasterProgress": "Beast Master Progress", "beastMasterProgress": "Beast Master Progress",
"beastAchievement": "You have earned the \"Beast Master\" Achievement for collecting all the pets!", "beastAchievement": "You have earned the Beast Master Achievement for collecting all the pets!",
"beastMasterName": "Beast Master", "beastMasterName": "Beast Master",
"beastMasterText": "Has found all 90 pets (incredibly difficult, congratulate this user!)", "beastMasterText": "Has found all 90 pets (incredibly difficult, congratulate this user!)",
"beastMasterText2": " and has released their pets a total of <%= count %> time(s)", "beastMasterText2": " and has released their pets a total of <%= count %> time(s)",
"mountMasterProgress": "Mount Master Progress", "mountMasterProgress": "Mount Master Progress",
"mountAchievement": "You have earned the \"Mount Master\" achievement for taming all the mounts!", "mountAchievement": "You have earned the Mount Master achievement for taming all the mounts!",
"mountMasterName": "Mount Master", "mountMasterName": "Mount Master",
"mountMasterText": "Has tamed all 90 mounts (even more difficult, congratulate this user!)", "mountMasterText": "Has tamed all 90 mounts (even more difficult, congratulate this user!)",
"mountMasterText2": " and has released all 90 of their mounts a total of <%= count %> time(s)", "mountMasterText2": " and has released all 90 of their mounts a total of <%= count %> time(s)",
"triadBingoName": "Triad Bingo", "triadBingoName": "Triad Bingo",
"triadBingoText": "Has found all 90 pets, all 90 mounts, and found all 90 pets AGAIN (HOW DID YOU DO THAT!)", "triadBingoText": "Has found all 90 pets, all 90 mounts, and found all 90 pets AGAIN (HOW DID YOU DO THAT!)",
"triadBingoText2": " and has released all their Pets and Mounts a total of <%= count %> time(s)", "triadBingoText2": " and has released all their Pets and Mounts a total of <%= count %> time(s)",
"triadBingoAchievement": "You have earned the \"Triad Bingo\" achievement for finding all the pets, taming all the mounts, and finding all the pets again!", "triadBingoAchievement": "You have earned the Triad Bingo achievement for finding all the pets, taming all the mounts, and finding all the pets again!",
"hatchedPet": "You hatched a new <%= potion %> <%= egg %>!", "hatchedPet": "You hatched a new <%= potion %> <%= egg %>!",
"hatchedPetGeneric": "You hatched a new pet!", "hatchedPetGeneric": "You hatched a new pet!",
"hatchedPetHowToUse": "Visit [Pets and Mounts](<%= stableUrl %>) to feed and equip your newest pet!", "hatchedPetHowToUse": "Visit [Pets and Mounts](<%= stableUrl %>) to feed and equip your newest pet!",
+2 -2
View File
@@ -42,8 +42,8 @@
"questInviteNotFound": "No quest invitation found.", "questInviteNotFound": "No quest invitation found.",
"guildQuestsNotSupported": "Guilds cannot be invited on quests.", "guildQuestsNotSupported": "Guilds cannot be invited on quests.",
"questNotOwned": "You don't own that quest scroll.", "questNotOwned": "You don't own that quest scroll.",
"questNotGoldPurchasable": "Quest \"<%= key %>\" is not a Gold-purchasable quest.", "questNotGoldPurchasable": "Quest <%= key %> is not a Gold-purchasable quest.",
"questNotGemPurchasable": "Quest \"<%= key %>\" is not a Gem-purchasable quest.", "questNotGemPurchasable": "Quest <%= key %> is not a Gem-purchasable quest.",
"questAlreadyUnderway": "Your party is already on a quest. Try again when the current quest has ended.", "questAlreadyUnderway": "Your party is already on a quest. Try again when the current quest has ended.",
"questAlreadyAccepted": "You already accepted the quest invitation.", "questAlreadyAccepted": "You already accepted the quest invitation.",
"questLeaderCannotLeaveQuest": "Quest leader cannot leave quest", "questLeaderCannotLeaveQuest": "Quest leader cannot leave quest",
+24 -24
View File
@@ -11,7 +11,7 @@
"questEvilSanta2CollectBranches": "Broken Twigs", "questEvilSanta2CollectBranches": "Broken Twigs",
"questEvilSanta2DropBearCubPolarPet": "Polar Bear (Pet)", "questEvilSanta2DropBearCubPolarPet": "Polar Bear (Pet)",
"questGryphonText": "The Fiery Gryphon", "questGryphonText": "The Fiery Gryphon",
"questGryphonNotes": "The grand beast master, <strong>baconsaur</strong>, has come to your party seeking help. \"Please, adventurers, you must help me! My prized gryphon has broken free and is terrorising Habit City! If you can stop her, I could reward you with some of her eggs!\"", "questGryphonNotes": "The grand beast master, <strong>baconsaur</strong>, has come to your party seeking help. Please, adventurers, you must help me! My prized gryphon has broken free and is terrorising Habit City! If you can stop her, I could reward you with some of her eggs!",
"questGryphonCompletion": "Defeated, the mighty beast ashamedly slinks back to its master. “My word! Well done, adventurers!” <strong>baconsaur</strong> exclaims, “Please, have some of the gryphons eggs. I am sure you will raise these young ones well!”", "questGryphonCompletion": "Defeated, the mighty beast ashamedly slinks back to its master. “My word! Well done, adventurers!” <strong>baconsaur</strong> exclaims, “Please, have some of the gryphons eggs. I am sure you will raise these young ones well!”",
"questGryphonBoss": "Fiery Gryphon", "questGryphonBoss": "Fiery Gryphon",
"questGryphonDropGryphonEgg": "Gryphon (Egg)", "questGryphonDropGryphonEgg": "Gryphon (Egg)",
@@ -24,7 +24,7 @@
"questHedgehogUnlockText": "Unlocks Hedgehog Eggs for purchase in the Market", "questHedgehogUnlockText": "Unlocks Hedgehog Eggs for purchase in the Market",
"questGhostStagText": "The Spirit of Spring", "questGhostStagText": "The Spirit of Spring",
"questGhostStagNotes": "Ahh, Spring. The time of year when colour once again begins to fill the landscape. Gone are the cold, snowy mounds of winter. Where frost once stood, vibrant plant life takes its place. Luscious green leaves fill in the trees, grass returns to its former vivid hue, a rainbow of flowers rise along the plains, and a white mystical fog covers the land! …Wait. Mystical fog? “Oh no,” <strong>InspectorCaracal</strong> says apprehensively, “It would appear that some kind of spirit is the cause of this fog. Oh, and it is charging right at you.”", "questGhostStagNotes": "Ahh, Spring. The time of year when colour once again begins to fill the landscape. Gone are the cold, snowy mounds of winter. Where frost once stood, vibrant plant life takes its place. Luscious green leaves fill in the trees, grass returns to its former vivid hue, a rainbow of flowers rise along the plains, and a white mystical fog covers the land! …Wait. Mystical fog? “Oh no,” <strong>InspectorCaracal</strong> says apprehensively, “It would appear that some kind of spirit is the cause of this fog. Oh, and it is charging right at you.”",
"questGhostStagCompletion": "The spirit, seemingly unwounded, lowers its nose to the ground. A calming voice envelops your party. \"I apologise for my behaviour. I have only just awoken from my slumber, and it would appear my wits have not completely returned to me. Please take these as a token of my apology.\" A cluster of eggs materialise on the grass before the spirit. Without another word, the spirit runs off into the forest with flowers falling in his wake.", "questGhostStagCompletion": "The spirit, seemingly unwounded, lowers its nose to the ground. A calming voice envelops your party, “I apologise for my behaviour. I have only just awoken from my slumber, and it would appear my wits have not completely returned to me. Please take these as a token of my apology. A cluster of eggs materialises on the grass before the spirit. Without another word, the spirit runs off into the forest with flowers falling in his wake.",
"questGhostStagBoss": "Ghost Stag", "questGhostStagBoss": "Ghost Stag",
"questGhostStagDropDeerEgg": "Deer (Egg)", "questGhostStagDropDeerEgg": "Deer (Egg)",
"questGhostStagUnlockText": "Unlocks Deer Eggs for purchase in the Market", "questGhostStagUnlockText": "Unlocks Deer Eggs for purchase in the Market",
@@ -35,14 +35,14 @@
"questRatDropRatEgg": "Rat (Egg)", "questRatDropRatEgg": "Rat (Egg)",
"questRatUnlockText": "Unlocks Rat Eggs for purchase in the Market", "questRatUnlockText": "Unlocks Rat Eggs for purchase in the Market",
"questOctopusText": "The Call of Octothulu", "questOctopusText": "The Call of Octothulu",
"questOctopusNotes": "@Urse, a wild-eyed young scribe, has asked for your help exploring a mysterious cave by the sea shore. Among the twilight tidepools stands a massive gate of stalactites and stalagmites. As you near the gate, a dark whirlpool begins to spin at its base. You stare in awe as a squid-like dragon rises through the maw. \"The sticky spawn of the stars has awakened,\" roars @Urse madly. \"After vigintillions of years, the great Octothulu is loose again, and ravening for delight!\"", "questOctopusNotes": "@Urse, a wild-eyed young scribe, has asked for your help exploring a mysterious cave by the sea shore. Among the twilight tidepools stands a massive gate of stalactites and stalagmites. As you near the gate, a dark whirlpool begins to spin at its base. You stare in awe as a squid-like dragon rises through the maw. The sticky spawn of the stars has awakened, roars @Urse madly, “After vigintillions of years, the great Octothulu is loose again, and ravening for delight!",
"questOctopusCompletion": "With a final blow, the creature slips away into the whirlpool from which it came. You cannot tell if @Urse is happy with your victory or saddened to see the beast go. Wordlessly, your companion points to three slimy, gargantuan eggs in a nearby tide-pool, set in a nest of gold coins. \"Probably just octopus eggs,\" you say nervously. As you return home, @Urse frantically scribbles in a journal and you suspect this is not the last time you will hear of the great Octothulu.", "questOctopusCompletion": "With a final blow, the creature slips away into the whirlpool from which it came. You cannot tell if @Urse is happy with your victory or saddened to see the beast go. Wordlessly, your companion points to three slimy, gargantuan eggs in a nearby tide-pool, set in a nest of gold coins. Probably just octopus eggs, you say nervously. As you return home, @Urse frantically scribbles in a journal and you suspect this is not the last time you will hear of the great Octothulu.",
"questOctopusBoss": "Octothulu", "questOctopusBoss": "Octothulu",
"questOctopusDropOctopusEgg": "Octopus (Egg)", "questOctopusDropOctopusEgg": "Octopus (Egg)",
"questOctopusUnlockText": "Unlocks Octopus Eggs for purchase in the Market", "questOctopusUnlockText": "Unlocks Octopus Eggs for purchase in the Market",
"questHarpyText": "Help! Harpy!", "questHarpyText": "Help! Harpy!",
"questHarpyNotes": "The brave adventurer @UncommonCriminal has disappeared into the forest, following the trail of a winged monster that was sighted several days ago. You are about to begin a search when a wounded parrot lands on your arm, an ugly scar marring its beautiful plumage. Attached to its leg is a scrawled note explaining that while defending the parrots, @UncommonCriminal was captured by a vicious Harpy, and desperately needs your help to escape. Will you follow the bird, defeat the Harpy, and save @UncommonCriminal?", "questHarpyNotes": "The brave adventurer @UncommonCriminal has disappeared into the forest, following the trail of a winged monster that was sighted several days ago. You are about to begin a search when a wounded parrot lands on your arm, an ugly scar marring its beautiful plumage. Attached to its leg is a scrawled note explaining that while defending the parrots, @UncommonCriminal was captured by a vicious Harpy, and desperately needs your help to escape. Will you follow the bird, defeat the Harpy, and save @UncommonCriminal?",
"questHarpyCompletion": "A final blow to the Harpy brings it down, feathers flying in all directions. After a quick climb to its nest you find @UncommonCriminal, surrounded by parrot eggs. As a team, you quickly place the eggs back in the nearby nests. The scarred parrot who found you caws loudly, dropping several eggs in your arms. \"The Harpy attack has left some eggs in need of protection,\" explains @UncommonCriminal. \"It seems you have been made an honorary parrot.\"", "questHarpyCompletion": "A final blow to the Harpy brings it down, feathers flying in all directions. After a quick climb to its nest you find @UncommonCriminal, surrounded by parrot eggs. As a team, you quickly place the eggs back in the nearby nests. The scarred parrot who found you caws loudly, dropping several eggs in your arms. The Harpy attack has left some eggs in need of protection, explains @UncommonCriminal, “It seems you have been made an honorary parrot.",
"questHarpyBoss": "Harpy", "questHarpyBoss": "Harpy",
"questHarpyDropParrotEgg": "Parrot (Egg)", "questHarpyDropParrotEgg": "Parrot (Egg)",
"questHarpyUnlockText": "Unlocks Parrot Eggs for purchase in the Market", "questHarpyUnlockText": "Unlocks Parrot Eggs for purchase in the Market",
@@ -114,7 +114,7 @@
"questGroupEarnable": "Earnable Quests", "questGroupEarnable": "Earnable Quests",
"questBasilistText": "The Basi-List", "questBasilistText": "The Basi-List",
"questBasilistNotes": "Theres a commotion in the marketplace—the kind that should make you run away. Being a courageous adventurer, you run towards it instead, and discover a Basi-list, coalescing from a clump of incomplete To Dos! Nearby Habiticans are paralysed with fear at the length of the Basi-list, unable to start working. From somewhere in the vicinity, you hear @Arcosine shout: “Quick! Complete your To Dos and Dailies to defang the monster, before someone gets a paper cut!” Strike fast, adventurer, and check something off—but beware! If you leave any Dailies undone, the Basi-list will attack you and your party!", "questBasilistNotes": "Theres a commotion in the marketplace—the kind that should make you run away. Being a courageous adventurer, you run towards it instead, and discover a Basi-list, coalescing from a clump of incomplete To Dos! Nearby Habiticans are paralysed with fear at the length of the Basi-list, unable to start working. From somewhere in the vicinity, you hear @Arcosine shout: “Quick! Complete your To Dos and Dailies to defang the monster, before someone gets a paper cut!” Strike fast, adventurer, and check something off—but beware! If you leave any Dailies undone, the Basi-list will attack you and your party!",
"questBasilistCompletion": "The Basi-list has scattered into paper scraps, which shimmer gently in rainbow colours. \"Whew!\" says @Arcosine. \"Good thing you guys were here!\" Feeling more experienced than before, you gather up some fallen gold from among the papers.", "questBasilistCompletion": "The Basi-list has scattered into paper scraps, which shimmer gently in rainbow colours. Whew! says @Arcosine, “Good thing you guys were here! Feeling more experienced than before, you gather up some fallen gold from among the papers.",
"questBasilistBoss": "The Basi-List", "questBasilistBoss": "The Basi-List",
"questEggHuntText": "Egg Hunt", "questEggHuntText": "Egg Hunt",
"questEggHuntNotes": "Overnight, strange plain eggs have appeared everywhere: in Matts stables, behind the counter at the Tavern, and even among the pet eggs at the Marketplace! What a nuisance! “Nobody knows where they came from, or what they might hatch into,” says Megan, “But we cant just leave them lying around! Work hard and search hard to help me gather up these mysterious eggs. Maybe if you collect enough, there will be some extras left over for you…”", "questEggHuntNotes": "Overnight, strange plain eggs have appeared everywhere: in Matts stables, behind the counter at the Tavern, and even among the pet eggs at the Marketplace! What a nuisance! “Nobody knows where they came from, or what they might hatch into,” says Megan, “But we cant just leave them lying around! Work hard and search hard to help me gather up these mysterious eggs. Maybe if you collect enough, there will be some extras left over for you…”",
@@ -466,7 +466,7 @@
"questPeacockDropPeacockEgg": "Peacock (Egg)", "questPeacockDropPeacockEgg": "Peacock (Egg)",
"questPeacockUnlockText": "Unlocks Peacock Eggs for purchase in the Market", "questPeacockUnlockText": "Unlocks Peacock Eggs for purchase in the Market",
"questButterflyText": "Bye, Bye, Butterfry", "questButterflyText": "Bye, Bye, Butterfry",
"questButterflyNotes": "Your gardener friend @Megan sends you an invitation: “These warm days are the perfect time to visit Habiticas butterfly garden in the Taskan countryside. Come see the butterflies migrate!” When you arrive, however, the garden is in shambles—little more than scorched grass and dried-out weeds. Its been so hot that the Habiticans havent come out to water the flowers, and the dark-red Dailies have turned it into a dry, sun-baked, fire-hazard. There's only one butterfly there, and there's something odd about it...<br><br>“Oh no! This is the perfect hatching ground for the Flaming Butterfry,” cries @Leephon.<br><br>“If we dont catch it, itll destroy everything!” gasps @Eevachu.<br><br>Time to say bye, bye to Butterfry!", "questButterflyNotes": "Your gardener friend @Megan sends you an invitation: “These warm days are the perfect time to visit Habiticas butterfly garden in the Taskan countryside. Come see the butterflies migrate!” When you arrive, however, the garden is in shambles—little more than scorched grass and dried-out weeds. Its been so hot that the Habiticans havent come out to water the flowers, and the dark-red Dailies have turned it into a dry, sun-baked, fire-hazard. Theres only one butterfly there, and theres something odd about it<br><br>“Oh no! This is the perfect hatching ground for the Flaming Butterfry,” cries @Leephon.<br><br>“If we dont catch it, itll destroy everything!” gasps @Eevachu.<br><br>Time to say bye-bye to Butterfry!",
"questButterflyCompletion": "After a blazing battle, the Flaming Butterfry is captured. “Great job catching that would-be arsonist,” says @Megan with a sigh of relief. “Still, its hard to vilify even the vilest butterfly. Wed better free this Butterfry someplace safe…like the desert.”<br><br>One of the other gardeners, @Beffymaroo, comes up to you, singed but smiling. “Will you help raise these foundling chrysalises we found? Perhaps next year well have a greener garden for them.”", "questButterflyCompletion": "After a blazing battle, the Flaming Butterfry is captured. “Great job catching that would-be arsonist,” says @Megan with a sigh of relief. “Still, its hard to vilify even the vilest butterfly. Wed better free this Butterfry someplace safe…like the desert.”<br><br>One of the other gardeners, @Beffymaroo, comes up to you, singed but smiling. “Will you help raise these foundling chrysalises we found? Perhaps next year well have a greener garden for them.”",
"questButterflyBoss": "Flaming Butterfry", "questButterflyBoss": "Flaming Butterfry",
"questButterflyDropButterflyEgg": "Caterpillar (Egg)", "questButterflyDropButterflyEgg": "Caterpillar (Egg)",
@@ -499,7 +499,7 @@
"featheredFriendsText": "Feathered Friends Quest Bundle", "featheredFriendsText": "Feathered Friends Quest Bundle",
"featheredFriendsNotes": "Contains Quests to obtain Owl, Parrot, and Hawk Pet eggs: The Night-Owl, Help! Harpy!, and The Birds of Preycrastination.", "featheredFriendsNotes": "Contains Quests to obtain Owl, Parrot, and Hawk Pet eggs: The Night-Owl, Help! Harpy!, and The Birds of Preycrastination.",
"questNudibranchText": "Infestation of the NowDo Nudibranchs", "questNudibranchText": "Infestation of the NowDo Nudibranchs",
"questNudibranchNotes": "You finally get around to checking your To Do's on a lazy day in Habitica. Bright against your deepest red tasks are a gaggle of vibrant blue sea slugs. You are entranced! Their sapphire colours make your most intimidating tasks look as easy as your best Habits. In a feverish stupor you get to work, tackling one task after the other in a ceaseless frenzy...<br><br>The next thing you know, @LilithofAlfheim is pouring cold water over you. “The NowDo Nudibranchs have been stinging you all over! You need to take a break!”<br><br>Shocked, you see that your skin is as bright red as your To Do list was. \"Being productive is one thing,\" @beffymaroo says, \"but you've also got to take care of yourself. Hurry, let's get rid of them!\"", "questNudibranchNotes": "You finally get around to checking your To Dos on a lazy day in Habitica. Bright against your deepest red tasks are a gaggle of vibrant blue sea slugs. You are entranced! Their sapphire colours make your most intimidating tasks look as easy as your best Habits. In a feverish stupor you get to work, tackling one task after the other in a ceaseless frenzy<br><br>The next thing you know, @LilithofAlfheim is pouring cold water over you. “The NowDo Nudibranchs have been stinging you all over! You need to take a break!”<br><br>Shocked, you see that your skin is as bright red as your To Do list was. Being productive is one thing, @beffymaroo says, “But youve also got to take care of yourself. Hurry, lets get rid of them!",
"questNudibranchCompletion": "You see the last of the NowDo Nudibranchs sliding off a pile of completed tasks as @amadshade washes them away. One leaves behind a cloth bag, and you open it to reveal some gold and a few little ellipsoids you guess are eggs.", "questNudibranchCompletion": "You see the last of the NowDo Nudibranchs sliding off a pile of completed tasks as @amadshade washes them away. One leaves behind a cloth bag, and you open it to reveal some gold and a few little ellipsoids you guess are eggs.",
"questNudibranchBoss": "NowDo Nudibranch", "questNudibranchBoss": "NowDo Nudibranch",
"questNudibranchDropNudibranchEgg": "Nudibranch (Egg)", "questNudibranchDropNudibranchEgg": "Nudibranch (Egg)",
@@ -589,7 +589,7 @@
"questsRageStrikeLead": "Ian is Heartbroken!", "questsRageStrikeLead": "Ian is Heartbroken!",
"questsRageStrikeRecap": "On March 6, our wonderful Ian the Quest Guide was deeply shaken when the Dysheartener shattered the ground around the Quest Shop. Quickly, tackle your tasks to defeat the monster and help rebuild!", "questsRageStrikeRecap": "On March 6, our wonderful Ian the Quest Guide was deeply shaken when the Dysheartener shattered the ground around the Quest Shop. Quickly, tackle your tasks to defeat the monster and help rebuild!",
"questDysheartenerBossRageMarket": "`The Dysheartener uses SHATTERING HEARTBREAK!`\n\nHelp! After feasting on our incomplete Dailies, the Dysheartener lets out another Shattering Heartbreak attack, smashing the walls and floor of the Market! As stone rains down, Alex the Merchant weeps at his crushed merchandise, stricken by the destruction.\n\nWe can't let this happen again! Be sure to do all our your Dailies to prevent the Dysheartener from using its final strike.", "questDysheartenerBossRageMarket": "`The Dysheartener uses SHATTERING HEARTBREAK!`\n\nHelp! After feasting on our incomplete Dailies, the Dysheartener lets out another Shattering Heartbreak attack, smashing the walls and floor of the Market! As stone rains down, Alex the Merchant weeps at his crushed merchandise, stricken by the destruction.\n\nWe can't let this happen again! Be sure to do all our your Dailies to prevent the Dysheartener from using its final strike.",
"questDysheartenerBossRageQuests": "`The Dysheartener uses SHATTERING HEARTBREAK!`\n\nAaaah! We've left our Dailies undone again, and the Dysheartener has mustered the energy for one final blow against our beloved shopkeepers. The countryside around Ian the Quest Master is ripped apart by its Shattering Heartbreak attack, and Ian is struck to the core by the horrific vision. We're so close to defeating this monster.... Hurry! Don't stop now!", "questDysheartenerBossRageQuests": "`The Dysheartener uses SHATTERING HEARTBREAK!`\n\nAaaah! Weve left our Dailies undone again, and the Dysheartener has mustered the energy for one final blow against our beloved shopkeepers. The countryside around Ian the Quest Master is ripped apart by its Shattering Heartbreak attack, and Ian is struck to the core by the horrific vision. Were so close to defeating this monster Hurry! Dont stop now!",
"questDysheartenerDropHippogriffPet": "Hopeful Hippogriff (Pet)", "questDysheartenerDropHippogriffPet": "Hopeful Hippogriff (Pet)",
"questDysheartenerDropHippogriffMount": "Hopeful Hippogriff (Mount)", "questDysheartenerDropHippogriffMount": "Hopeful Hippogriff (Mount)",
"dysheartenerArtCredit": "Artwork by @AnnDeLune", "dysheartenerArtCredit": "Artwork by @AnnDeLune",
@@ -630,7 +630,7 @@
"birdBuddiesText": "Bird Buddies Quest Bundle", "birdBuddiesText": "Bird Buddies Quest Bundle",
"birdBuddiesNotes": "Contains Quests to obtain Peacock, Penguin, and Rooster Pet eggs: The Push-and-Pull Peacock, The Fowl Frost, and Rooster Rampage.", "birdBuddiesNotes": "Contains Quests to obtain Peacock, Penguin, and Rooster Pet eggs: The Push-and-Pull Peacock, The Fowl Frost, and Rooster Rampage.",
"questVelociraptorText": "The Veloci-Rapper", "questVelociraptorText": "The Veloci-Rapper",
"questVelociraptorNotes": "Youre sharing honey cakes with @*~Seraphina~*, @Procyon P, and @Lilith of Alfheim by a lake in the Stoïkalm Steppes. Suddenly, a mournful voice interrupts your picnic.<br><br><em>My Habits took a hit, I missed my Dailies,<br>Im losing it, sinking with doubt and maybes,<br>At the top of my game I used to be so fly,<br>But now I just let my Due Dates go by.</em><br><br>@*~Seraphina~* peers behind a stand of grass. “Its the Veloci-Rapper. It seems... distraught?”<br><br>You pump a fist in determination. “There's only one thing to do. Rap battle time!”", "questVelociraptorNotes": "Youre sharing honey cakes with @*~Seraphina~*, @Procyon P, and @Lilith of Alfheim by a lake in the Stoïkalm Steppes. Suddenly, a mournful voice interrupts your picnic.<br><br><em>My Habits took a hit, I missed my Dailies,<br>Im losing it, sinking with doubt and maybes,<br>At the top of my game I used to be so fly,<br>But now I just let my Due Dates go by.</em><br><br>@*~Seraphina~* peers behind a stand of grass. “Its the Veloci-Rapper. It seems distraught?”<br><br>You pump a fist in determination. “Theres only one thing to do. Rap battle time!”",
"questVelociraptorCompletion": "You burst through the grass, confronting the Veloci-Rapper.<br><br><em>See here, rapper, youre no quitter,<br>Youre Bad Habits' hardest hitter!<br>Check off your To Do's like a boss,<br>Dont mourn over one days loss!</em><br><br>Filled with renewed confidence, it bounds off to freestyle another day, leaving behind three eggs where it sat.", "questVelociraptorCompletion": "You burst through the grass, confronting the Veloci-Rapper.<br><br><em>See here, rapper, youre no quitter,<br>Youre Bad Habits' hardest hitter!<br>Check off your To Do's like a boss,<br>Dont mourn over one days loss!</em><br><br>Filled with renewed confidence, it bounds off to freestyle another day, leaving behind three eggs where it sat.",
"questVelociraptorBoss": "Veloci-Rapper", "questVelociraptorBoss": "Veloci-Rapper",
"questVelociraptorDropVelociraptorEgg": "Velociraptor (Egg)", "questVelociraptorDropVelociraptorEgg": "Velociraptor (Egg)",
@@ -651,14 +651,14 @@
"questSilverUnlockText": "Unlocks Silver Hatching Potions for purchase in the Market", "questSilverUnlockText": "Unlocks Silver Hatching Potions for purchase in the Market",
"questSilverCollectMoonRunes": "Moon Runes", "questSilverCollectMoonRunes": "Moon Runes",
"questSilverCollectCancerRunes": "Cancer Zodiac Runes", "questSilverCollectCancerRunes": "Cancer Zodiac Runes",
"questSilverCompletion": "You've delved. You've dredged. You've scavenged. At last you emerge from the Dungeons, laden with runes and bars of silver, covered in sludge but exhilarated with success. You journey back to Habit City and set to work in an alchemy lab. You and @starsystemic follow the formulas @QuartzFox found, under the careful supervision of @Edge. Finally, in a great puff of glitter and smoke, your concoction settles into the familiar viscosity of a Hatching Potion!<br><br>@Edge scoops the mixture into vials and grins. “Let's give it a try, shall we? Anyone got any Eggs?”<br><br>You rush to the stables, wondering what shining secrets may yet remain undiscovered...", "questSilverCompletion": "Youve delved. Youve dredged. Youve scavenged. At last you emerge from the Dungeons, laden with runes and bars of silver, covered in sludge but exhilarated with success. You journey back to Habit City and set to work in an alchemy lab. You and @starsystemic follow the formulas @QuartzFox found, under the careful supervision of @Edge. Finally, in a great puff of glitter and smoke, your concoction settles into the familiar viscosity of a Hatching Potion!<br><br>@Edge scoops the mixture into vials and grins. “Lets give it a try, shall we? Anyone got any Eggs?”<br><br>You rush to the stables, wondering what shining secrets may yet remain undiscovered",
"questSilverNotes": "The recent discovery of Bronze Hatching Potions has all of Habitica talking. Could potions of even brighter metals be possible? You head to Habit City's central Public Library, accompanied by @QuartzFox and @starsystemic, and gather up great armloads of books on alchemy to study.<br><br>After hours of eye-straining labour, @QuartzFox lets out a not-quite-library-appropriate shout of triumph. “Aha! I've found it!” You hurry over to see. “A Silver Hatching Potion can be made with runes of the zodiac sign Cancer, dissolved in pure silver melted over flame infused with the power of Moon runes.”<br><br>“We'll need a lot of those ingredients,” muses @starsystemic. “In case an attempt goes wrong.”<br><br>“There's only one place to find huge quantities of such random crafting materials,” says @Edge, standing in the shadow of the stacks with arms crossed. Have they been there the whole time? “The Dungeons of Drudgery. Let's get going.”", "questSilverNotes": "The recent discovery of Bronze Hatching Potions has all of Habitica talking. Could potions of even brighter metals be possible? You head to Habit City's central Public Library, accompanied by @QuartzFox and @starsystemic, and gather up great armloads of books on alchemy to study.<br><br>After hours of eye-straining labour, @QuartzFox lets out a not-quite-library-appropriate shout of triumph. “Aha! I've found it!” You hurry over to see. “A Silver Hatching Potion can be made with runes of the zodiac sign Cancer, dissolved in pure silver melted over flame infused with the power of Moon runes.”<br><br>“We'll need a lot of those ingredients,” muses @starsystemic. “In case an attempt goes wrong.”<br><br>“There's only one place to find huge quantities of such random crafting materials,” says @Edge, standing in the shadow of the stacks with arms crossed. Have they been there the whole time? “The Dungeons of Drudgery. Let's get going.”",
"questSilverText": "The Silver Solution", "questSilverText": "The Silver Solution",
"questDolphinUnlockText": "Unlocks Dolphin Eggs for purchase in the Market", "questDolphinUnlockText": "Unlocks Dolphin Eggs for purchase in the Market",
"questDolphinDropDolphinEgg": "Dolphin (Egg)", "questDolphinDropDolphinEgg": "Dolphin (Egg)",
"questDolphinCompletion": "Your battle of wills with the dolphin has left you tired but victorious. With your determination and encouragement, @mewrose, @khdarkwolf, and @confusedcicada pick themselves up and shake off the dolphins insidious telepathy. The four of you shield yourselves with a sense of accomplishment in your consistent Dailies, strong Habits, and completed To Do's until it closes its glowing eyes in silent acknowledgment of your successes. With that, it tumbles back into the bay. As you trade high-fives and congratulations, you notice three eggs wash ashore.<br><br>“Hm, I wonder what we can do with those,” @khdarkwolf muses.", "questDolphinCompletion": "Your battle of wills with the dolphin has left you tired but victorious. With your determination and encouragement, @mewrose, @khdarkwolf, and @confusedcicada pick themselves up and shake off the dolphins insidious telepathy. The four of you shield yourselves with a sense of accomplishment in your consistent Dailies, strong Habits, and completed To Do's until it closes its glowing eyes in silent acknowledgment of your successes. With that, it tumbles back into the bay. As you trade high-fives and congratulations, you notice three eggs wash ashore.<br><br>“Hm, I wonder what we can do with those,” @khdarkwolf muses.",
"questDolphinBoss": "Dolphin of Doubt", "questDolphinBoss": "Dolphin of Doubt",
"questDolphinNotes": "You walk upon the shores of Inkomplete Bay, pondering the daunting work ahead of you. A splash in the water catches your eye. A magnificent dolphin arcs over the waves. Sunlight glimmers off its fins and tail. But wait...thats not sunlight, and the dolphin doesnt dip back into the sea. It fixes its gaze on @khdarkwolf.<br><br>“Ill never finish all these Dailies,” said @khdarkwolf.<br><br>“Im not good enough to reach my goals,” said @confusedcicada as the dolphin turned its glare on them.<br><br>“Why did I even bother trying?” asked @mewrose, withering under the stare of the beast.<br><br>Its eyes meet yours, and feel your mind begin to sink under the rising tide of doubt. You steel yourself; someone has to defeat this creature, and its going to be you!", "questDolphinNotes": "You walk upon the shores of Inkomplete Bay, pondering the daunting work ahead of you. A splash in the water catches your eye. A magnificent dolphin arcs over the waves. Sunlight glimmers off its fins and tail. But waitthats not sunlight, and the dolphin doesnt dip back into the sea. It fixes its gaze on @khdarkwolf.<br><br>“Ill never finish all these Dailies,” says @khdarkwolf.<br><br>“Im not good enough to reach my goals,” says @confusedcicada as the dolphin turns its glare on them.<br><br>“Why did I even bother trying?” asks @mewrose, withering under the stare of the beast.<br><br>Its eyes meet yours, and you feel your mind begin to sink under the rising tide of doubt. You steel yourself; someone has to defeat this creature, and its going to be you!",
"questDolphinText": "The Dolphin of Doubt", "questDolphinText": "The Dolphin of Doubt",
"questBronzeUnlockText": "Unlocks Bronze Hatching Potions for purchase in the Market", "questBronzeUnlockText": "Unlocks Bronze Hatching Potions for purchase in the Market",
"questBronzeDropBronzePotion": "Bronze Hatching Potion", "questBronzeDropBronzePotion": "Bronze Hatching Potion",
@@ -672,7 +672,7 @@
"delightfulDinosNotes": "Contains Quests to obtain Triceratops, T-Rex, and Pterodactyl Pet eggs: The Trampling Triceratops, The Dinosaur Unearthed, and The Pterror-dactyl.", "delightfulDinosNotes": "Contains Quests to obtain Triceratops, T-Rex, and Pterodactyl Pet eggs: The Trampling Triceratops, The Dinosaur Unearthed, and The Pterror-dactyl.",
"questAmberText": "The Amber Alliance", "questAmberText": "The Amber Alliance",
"questAmberNotes": "Youre sitting in the Tavern with @beffymaroo and @-Tyr- when @Vikte bursts through the door and excitedly tells you about the rumours of another type of Magic Hatching Potion hidden in the Taskwoods. Having completed your Dailies, the three of you immediately agree to help @Vikte on their search. After all, whats the harm in a little adventure?<br><br>After walking through the Taskwoods for hours, youre beginning to regret joining such a wild chase. Youre about to head home, when you hear a surprised yelp and turn to see a huge lizard with shiny amber scales coiled around a tree, clutching @Vikte in her claws. @beffymaroo reaches for her sword.<br><br>“Wait!” cries @-Tyr-. “Its the Trerezin! Shes not dangerous, just dangerously clingy!”", "questAmberNotes": "Youre sitting in the Tavern with @beffymaroo and @-Tyr- when @Vikte bursts through the door and excitedly tells you about the rumours of another type of Magic Hatching Potion hidden in the Taskwoods. Having completed your Dailies, the three of you immediately agree to help @Vikte on their search. After all, whats the harm in a little adventure?<br><br>After walking through the Taskwoods for hours, youre beginning to regret joining such a wild chase. Youre about to head home, when you hear a surprised yelp and turn to see a huge lizard with shiny amber scales coiled around a tree, clutching @Vikte in her claws. @beffymaroo reaches for her sword.<br><br>“Wait!” cries @-Tyr-. “Its the Trerezin! Shes not dangerous, just dangerously clingy!”",
"questAmberCompletion": "“Trerezin?” @-Tyr- says calmly. “Could you let @Vikte go? I dont think theyre enjoying being so high up.”<br><br>The Trerezins amber skin blushes crimson and she gently lowers @Vikte to the ground. “My apologies! Its been so long since Ive had any guests that Ive forgotten my manners!” She slithers forward to greet you properly before disappearing into her treehouse, and returning with an armful of Amber Hatching Potions as thank-you gifts!<br><br>“Magic Potions!” @Vikte gasps.<br><br>“Oh, these old things?” The Trerezin's tongue flickers as she thinks. “How about this? Ill give you this whole stack if you promise to visit me every so often...”<br><br>And so you leave the Taskwoods, excited to tell everyone about the new potions—and your new friend!", "questAmberCompletion": "“Trerezin?” @-Tyr- says calmly, “Could you let @Vikte go? I dont think theyre enjoying being so high up.”<br><br>The Trerezins amber skin blushes crimson and she gently lowers @Vikte to the ground. “My apologies! Its been so long since Ive had any guests that Ive forgotten my manners!” She slithers forward to greet you properly before disappearing into her treehouse, and returning with an armful of Amber Hatching Potions as thank-you gifts!<br><br>“Magic Potions!” @Vikte gasps.<br><br>“Oh, these old things?” The Trerezin's tongue flickers as she thinks. “How about this? Ill give you this whole stack if you promise to visit me every so often”<br><br>And so you leave the Taskwoods, excited to tell everyone about the new potions—and your new friend!",
"questAmberBoss": "Trerezin", "questAmberBoss": "Trerezin",
"questAmberDropAmberPotion": "Amber Hatching Potion", "questAmberDropAmberPotion": "Amber Hatching Potion",
"questAmberUnlockText": "Unlocks Amber Hatching Potions for purchase in the Market", "questAmberUnlockText": "Unlocks Amber Hatching Potions for purchase in the Market",
@@ -681,13 +681,13 @@
"questRubyCollectRubyGems": "Ruby Gems", "questRubyCollectRubyGems": "Ruby Gems",
"questRubyCollectVenusRunes": "Venus Runes", "questRubyCollectVenusRunes": "Venus Runes",
"questRubyCollectAquariusRunes": "Aquarius Zodiac Runes", "questRubyCollectAquariusRunes": "Aquarius Zodiac Runes",
"questRubyCompletion": "With the necessary items safely packed away, the three of you rush back to Habit City and meet in @beffymaroo's lab. “Excellent work!” @beffymaroo says. “You've gathered the ingredients for the potion!”<br><br>@beffymaroo carefully combines the runes and the rubies to create a brilliant red potion and pours some of it on two pet eggs. As you observe the results, you notice that the two pets seem completely uninterested in one another!<br><br>“Did it not work?” @gully asks. But before anyone can answer, you suddenly realise that it isn't the potion that creates friendship and love, but rather it is the experience of working together toward a common goal. You come away from the quest having gained some new friends...and some flashy new pets!", "questRubyCompletion": "With the necessary items safely packed away, the three of you rush back to Habit City and meet in @beffymaroos lab. “Excellent work!” @beffymaroo says, “Youve gathered the ingredients for the potion!”<br><br>@beffymaroo carefully combines the runes and the rubies to create a brilliant red potion and pours some of it onto two pet eggs. As you observe the results, you notice that the two pets seem completely uninterested in one another!<br><br>“Did it not work?” @gully asks. But before anyone can answer, you suddenly realise that it isnt the potion that creates friendship and love, but rather it is the experience of working together towards a common goal. You come away from the quest having gained some new friendsand some flashy new pets!",
"questRubyNotes": "The normally bustling peaks of the Stoïkalm Volcanoes lie silent in the snow. “I suppose the hikers and sight-seers are hibernating?” @gully says to you and @Aspiring_Advocate. “That makes our search easier.”<br><br>As you reach the summit, the chill wind merges with the steam billowing from the crater. “There!” @Aspiring_Advocate exclaims, pointing toward a hot spring. “What better place to find cool runes of Aquarius and passionate runes of Venus than where ice and fire meet?”<br><br>The three of you hurry toward the hot spring. “According to my research,” @Aspiring_Advocate says, “combining the runes with heart-shaped rubies will create a hatching potion that can foster friendship and love!”<br><br>Excited by the prospect of a new discovery, you all smile. “All right,” @gully says, “let's start searching!”", "questRubyNotes": "The normally bustling peaks of the Stoïkalm Volcanoes lie silent in the snow. “I suppose the hikers and sight-seers are hibernating?” @gully says to you and @Aspiring_Advocate. “That makes our search easier.”<br><br>As you reach the summit, the chill wind merges with the steam billowing from the crater. “There!” @Aspiring_Advocate exclaims, pointing toward a hot spring. “What better place to find cool runes of Aquarius and passionate runes of Venus than where ice and fire meet?”<br><br>The three of you hurry toward the hot spring. “According to my research,” @Aspiring_Advocate says, “combining the runes with heart-shaped rubies will create a hatching potion that can foster friendship and love!”<br><br>Excited by the prospect of a new discovery, you all smile. “All right,” @gully says, “let's start searching!”",
"questRubyText": "Ruby Rapport", "questRubyText": "Ruby Rapport",
"questWaffleRageTitle": "Maple Mire", "questWaffleRageTitle": "Maple Mire",
"questWaffleBoss": "Awful Waffle", "questWaffleBoss": "Awful Waffle",
"questWaffleCompletion": "Battered and buttered but triumphant, you savour sweet victory as the Awful Waffle collapses into a pool of sticky goo.<br><br>“Wow, you really creamed that monster,” says Lady Glaciate, impressed.<br><br>“A piece of cake!” beams the April Fool.<br><br>“Kind of a shame, though,” says @beffymaroo. “It looked good enough to eat.”<br><br>The Fool takes a set of potion bottles from somewhere in his cape, fills them with the syrupy leavings of the Waffle, and mixes in a pinch of sparkling dust. The liquid swirls with colour—new Hatching Potions! He tosses them into your arms. “All that adventure has given me an appetite. Who wants to join me for breakfast?”", "questWaffleCompletion": "Battered and buttered but triumphant, you savour sweet victory as the Awful Waffle collapses into a pool of sticky goo.<br><br>“Wow, you really creamed that monster,” says Lady Glaciate, impressed.<br><br>“A piece of cake!” beams the April Fool.<br><br>“Kind of a shame, though,” says @beffymaroo. “It looked good enough to eat.”<br><br>The Fool takes a set of potion bottles from somewhere in his cape, fills them with the syrupy leavings of the Waffle, and mixes in a pinch of sparkling dust. The liquid swirls with colour—new Hatching Potions! He tosses them into your arms. “All that adventure has given me an appetite. Who wants to join me for breakfast?”",
"questWaffleNotes": "“April Fool!” storms a flustered Lady Glaciate. “You said your dessert-themed prank was over with and completely cleaned up!”<br><br>“Why, it was and is, my dear,” replies the Fool, puzzled. “And I am the most honest of Fools. What's wrong?”<br><br>“There's a giant sugary monster approaching Habit City!”<br><br>“Hmm,” muses the Fool. “I did raid a few lairs for the mystic reagents for my last event. Maybe I attracted some unwanted attention. Is it the Saccharine Serpent? The Torte-oise? Tiramisu Rex?”<br><br>“No! It's some sort of... Awful Waffle!”<br><br>“Huh. That's a new one! Perhaps it spawned from all the ambient shenanigan energy.” He turns to you and @beffymaroo with a lopsided smile. “I don't suppose you'd be available for some heroics?”", "questWaffleNotes": "“April Fool!” storms a flustered Lady Glaciate, “You said your dessert-themed prank was over with and completely cleaned up!”<br><br>“Why, it was and is, my dear,” replies the Fool, puzzled, “And I am the most honest of Fools. Whats wrong?”<br><br>“Theres a giant sugary monster approaching Habit City!”<br><br>“Hmm,” muses the Fool. “I did raid a few lairs for the mystic reagents for my last event. Maybe I attracted some unwanted attention. Is it the Saccharine Serpent? The Torte-oise? Tiramisu Rex?”<br><br>“No! Its some sort of Awful Waffle!”<br><br>“Huh. Thats a new one! Perhaps it spawned from all the ambient shenanigan energy.” He turns to you and @beffymaroo with a lopsided smile, “I dont suppose youd be available for some heroics?”",
"questWaffleText": "Waffling with the Fool: Disaster Breakfast!", "questWaffleText": "Waffling with the Fool: Disaster Breakfast!",
"questWaffleUnlockText": "Unlocks Confection Hatching Potions for purchase in the Market", "questWaffleUnlockText": "Unlocks Confection Hatching Potions for purchase in the Market",
"questWaffleDropDessertPotion": "Confection Hatching Potion", "questWaffleDropDessertPotion": "Confection Hatching Potion",
@@ -804,19 +804,19 @@
"questOtterUnlockText": "Unlocks Otter Eggs for Purchase in the Market", "questOtterUnlockText": "Unlocks Otter Eggs for Purchase in the Market",
"questJadeText": "A Jaded Jinx", "questJadeText": "A Jaded Jinx",
"questOtterBoss": "The Plotter", "questOtterBoss": "The Plotter",
"questJadeCompletion": "After countless setbacks, you somehow managed to roll the jade boulder up to the top of the mountain! The stony figure catches up to you and smiles. He gives the boulder a gentle push and you watch in horror as it rolls all the way back to the bottom.<br><br>“Why would you do that? Someone will have to do it all over again now!” you balk.<br><br>“Just because you have to do something more than once doesnt mean your accomplishments are meaningless,” the stone figure says. “For now, focus on what you achieved and enjoy a reward!”<br><br>You jolt awake back on your couch, phone fallen to the floor. In its place are three bottles filled with flowing jade! Maybe its time to clean todays dishes and then take a break to see how these potions work on some pet eggs...", "questJadeCompletion": "After countless setbacks, you somehow managed to roll the jade boulder up to the top of the mountain! The stony figure catches up to you and smiles. He gives the boulder a gentle push and you watch in horror as it rolls all the way back to the bottom.<br><br>“Why would you do that? Someone will have to do it all over again now!” you balk.<br><br>“Just because you have to do something more than once doesnt mean your accomplishments are meaningless,” the stone figure says, “For now, focus on what you achieved and enjoy a reward!”<br><br>You jolt awake back on your couch, phone fallen to the floor. In its place are three bottles filled with flowing jade! Maybe its time to clean todays dishes and then take a break to see how these potions work on some pet eggs",
"questJadeBoss": "Jaded Jinx", "questJadeBoss": "Jaded Jinx",
"questJadeDropJadePotion": "Jade Hatching Potion", "questJadeDropJadePotion": "Jade Hatching Potion",
"questJadeUnlockText": "Unlocks Jade Hatching Potion for Purchase in the Market.", "questJadeUnlockText": "Unlocks Jade Hatching Potion for Purchase in the Market.",
"questGiraffeNotes": "Youre strolling across the tall grass of the Sloenstedi Savannah, enjoying a nice walk in nature as a break from your tasks. As you pass through the rolling landscape, you notice a collection of items in the distance. Its a pile of musical instruments, art supplies, electronic equipment, and more! You venture near for a better look.<br><br>“Hey, what do you think youre doing?” yells a voice from behind an acacia. A tall and imposing giraffe emerges, wearing a fancy pair of shades, a guitar, and a fancy camera around its long neck. “This is all my gear. Be careful and dont touch anything!”<br><br>You notice dust on many of the items. “Wow, you sure have a lot of hobbies!” you say. “Can you show me some art or play me a tune?”<br><br>The giraffes face falls as he looks at all his supplies. “I have so much of this stuff but dont know where to begin! Why don't you give me some of your motivation so I can have the productive energy I need to finally get started!”", "questGiraffeNotes": "Youre strolling across the tall grass of the Sloenstedi Savannah, enjoying a nice walk in nature as a break from your tasks. As you pass through the rolling landscape, you notice a collection of items in the distance. Its a pile of musical instruments, art supplies, electronic equipment, and more! You venture near for a better look.<br><br>“Hey, what do you think youre doing?” yells a voice from behind an acacia. A tall and imposing giraffe emerges, wearing a fancy pair of shades, a guitar, and a fancy camera around its long neck. “This is all my gear. Be careful and dont touch anything!”<br><br>You notice dust on many of the items. “Wow, you sure have a lot of hobbies!” you say. “Can you show me some art or play me a tune?”<br><br>The giraffes face falls as he looks at all his supplies. “I have so much of this stuff but dont know where to begin! Why don't you give me some of your motivation so I can have the productive energy I need to finally get started!”",
"questGiraffeUnlockText": "Unlocks Giraffe Eggs for purchase in the Market.", "questGiraffeUnlockText": "Unlocks Giraffe Eggs for purchase in the Market.",
"questChameleonNotes": "Its a beautiful day in a warm, rainy corner of the Taskwoods. Youre on the hunt for new additions to your leaf collection when a branch in front of you changes colour without warning! Then it moves!<br><br>Stumbling backwards, you realise this is not a branch at all, but a huge chameleon! Each part of his body keeps changing colours as his eyes dart in different directions.<br><br>“Are you all right?” you ask the chameleon.<br><br>“Ahhh, well,” he says, looking a little flustered. “Ive been trying to blend in… but its so overwhelming… the colours keep coming and going! Its hard to focus on just one....”<br><br>“Aha,” you say, “I think I can help. Well sharpen your focus with a little challenge! Get your colours ready!”<br><br>“Youre on!” replied the chameleon.", "questChameleonNotes": "Its a beautiful day in a warm, rainy corner of the Taskwoods. Youre on the hunt for new additions to your leaf collection when a branch in front of you changes colour without warning! Then it moves!<br><br>Stumbling backwards, you realise this is not a branch at all, but a huge chameleon! Each part of his body keeps changing colours as his eyes dart in different directions.<br><br>“Are you all right?” you ask the chameleon.<br><br>“Ahhh, well,” he says, looking a little flustered, “Ive been trying to blend in… but its so overwhelming… the colours keep coming and going! Its hard to focus on just one”<br><br>“Aha,” you say, “I think I can help. Well sharpen your focus with a little challenge! Get your colours ready!”<br><br>“Youre on!” replies the chameleon.",
"questCrabNotes": "Its a warm sunny morning, and youre enjoying a visit to the beach to catch up on some of the books on your summer reading list. Youre startled when you nearly step on a shiny crystal near a shallow hole in the sand.<br><br>“Ey, watch where youre goin! Im makin a burrow here!” says a voice. A surprisingly large crab with a decorative shell runs out in front of your toes, snapping her claws as she speaks.<br><br>“Hmm… is this a burrow?” you ask, looking at the shallow depression. There are shells and crystals arranged around it, but its not much in the way of a hiding place.<br><br>The crab stammers. “Ey, this is a judgement-free zone! Im gettin to it, Im gettin to it… I just got caught up on decorating. Sometimes a crabs gotta fiddle,” she says, adjusting a shell.<br><br>“Why dont you lend me a claw and help if you've got some big ideas on what a burrow should look like?”", "questCrabNotes": "Its a warm sunny morning, and youre enjoying a visit to the beach to catch up on some of the books on your summer reading list. Youre startled when you nearly step on a shiny crystal near a shallow hole in the sand.<br><br>“Ey, watch where youre goin! Im makin a burrow here!” says a voice. A surprisingly large crab with a decorative shell runs out in front of your toes, snapping her claws as she speaks.<br><br>“Hmm… is this a burrow?” you ask, looking at the shallow depression. There are shells and crystals arranged around it, but its not much in the way of a hiding place.<br><br>The crab stammers. “Ey, this is a judgement-free zone! Im gettin to it, Im gettin to it… I just got caught up on decorating. Sometimes a crabs gotta fiddle,” she says, adjusting a shell.<br><br>“Why dont you lend me a claw and help if you've got some big ideas on what a burrow should look like?”",
"questRaccoonNotes": "Its a warm autumn day in Habitica and youre taking a slow stroll along Conquest Creek. You see some nifty semi-precious stones along the bank that would be perfect for a project youve been planning.<br><br>You start stashing your best finds in a pile beneath a tree. Strangely, each time you return the pile seems to be getting smaller, not larger...<br><br>That can't be right. You look all around but nothing odd stands out. Just as you turn around to head back to the creek, you catch a hand-like paw reaching out of a hollow in the trunk and snatch some of your stones!<br><br>\"Hey!\" you yell, \"Ive been working hard collecting those. Its not cool to take them without asking!\"<br><br>A masked face pops out of the hole and grins at you. \"Finders keepers!\" says the Raccoon. He slips back inside the tree, bags of stones in hand. You dive in after him! These stones are worth fighting for.", "questRaccoonNotes": "Its a warm autumn day in Habitica and youre taking a slow stroll along Conquest Creek. You see some nifty semi-precious stones along the bank that would be perfect for a project youve been planning.<br><br>You start stashing your best finds in a pile beneath a tree. Strangely, each time you return the pile seems to be getting smaller, not larger<br><br>That cant be right. You look all around but nothing odd stands out. Just as you turn around to head back to the creek, you catch a hand-like paw reaching out of a hollow in the trunk and snatching some of your stones!<br><br>Hey! you yell, Ive been working hard collecting those. Its not cool to take them without asking!<br><br>A masked face pops out of the hole and grins at you. Finders keepers! says the Raccoon. He slips back inside the tree, bags of stones in hand. You dive in after him! These stones are worth fighting for.",
"questDogNotes": "Youve been chosen for an expedition to map Habiticas underground cave systems! Researchers in Habit City theorise that there may be new tools for managing tasks or even undiscovered creatures in these depths.<br><br>As you map rocky tunnels near the foothills of the Meandering Mountains, you notice a glow emanating from a craggy entrance ahead. As you near you see… toys? Stuffed animals and rubber balls are scattered around the cave floor. Is that barking you hear?<br><br>A huge, three-headed dog jumps out, darting for the toy you were right about to pick up! You freeze, almost losing a limb there! But... the dogs mouths seem too occupied with toys to attack?<br><br>“Woof!” one of the dog's mouths barks, dropping a torn toy raccoon. “Are you here to help me clean?? I reeeally need to tidy up but every time I pick up a toy, I just end up playing with it… Here, think fast!!”<br><br>He launches a ball at you, and then another, and another. Those extra heads really make dodging a workout!", "questDogNotes": "Youve been chosen for an expedition to map Habiticas underground cave systems! Researchers in Habit City theorise that there may be new tools for managing tasks or even undiscovered creatures in these depths.<br><br>As you map rocky tunnels near the foothills of the Meandering Mountains, you notice a glow emanating from a craggy entrance ahead. As you near you see… toys? Stuffed animals and rubber balls are scattered around the cave floor. Is that barking you hear?<br><br>A huge, three-headed dog jumps out, darting for the toy you were right about to pick up! You freeze, almost losing a limb there! But the dogs mouths seem too occupied with toys to attack?<br><br>“Woof!” one of the dogs mouths barks, dropping a torn toy raccoon. “Are you here to help me clean?? I reeeally need to tidy up but every time I pick up a toy, I just end up playing with it… Here, think fast!!”<br><br>He launches a ball at you, and then another, and another. Those extra heads really make dodging a workout!",
"questCatNotes": "On this fine day you find yourself in Habit City's Enchanted Efficiency Emporium workshop. You've been assigned a tough task: create a new magic motivation spell to help Habiticans everywhere complete their goals with ease.<br><br>Sitting on a table in front of you is a variety of magical objects. All the tomes said they were supposed to resonate together with productive energy… but so far there's not even a spark of motivation.<br><br>The creaking of a door alerts you to a new guest entering your workshop. Scampering feet and a blur of fluff dart onto the table. A... cat? Before you even have a chance to compliment how fluffy she is, she's lifting a paw to one of the crystals you set up and… knocking it off the table!<br><br>\"Hey!\" you shout, \"You're really cute but I'm trying to do some work over here...\"<br><br>She looks at you with her pretty blue eyes, tilts her head, and bats a bundle of herbs off the table. \"I'm helping!\" she purrs.<br><br>You see her paw reaching out toward the rest of the items you've collected and dive to the floor to catch the next one to go down!", "questCatNotes": "On this fine day you find yourself in Habit Citys Enchanted Efficiency Emporium workshop. Youve been assigned a tough task: create a new magic motivation spell to help Habiticans everywhere complete their goals with ease.<br><br>Sitting on a table in front of you is a variety of magical objects. All the tomes said they were supposed to resonate together with productive energy… but so far theres not even a spark of motivation.<br><br>The creaking of a door alerts you to a new guest entering your workshop. Scampering feet and a blur of fluff dart onto the table. A cat? Before you even have a chance to compliment how fluffy she is, shes lifting a paw to one of the crystals you set up and… knocking it off the table!<br><br>Hey! you shout, Youre really cute but I'm trying to do some work over here…”<br><br>She looks at you with her pretty blue eyes, tilts her head, and bats a bundle of herbs off the table. “Im helping! she purrs.<br><br>You see her paw reaching out toward the rest of the items youve collected and dive to the floor to catch the next one to go down!",
"questOtterNotes": "To-do lists are great! You can spend hours meticulously documenting each step you need to take and feel productive without actually doing those things. Your three-page list gets stuffed into your pocket. Time for a refreshing walk!<br><br>You depart towards the Routine River to take a stroll along the banks. This is exactly what you needed to finally get started! Time to take out your to-do list and—ah! A gust of wind has your list flying out of your hand and headed right for the water!<br><br>Right before the paper hits the water, an otter head pops up to the surface intercepting the sheets sure demise. Phew! He grasps the list in his paws and a mischievous grin spreads across his face… uh-oh.<br><br>“Hmm…” he hums, flipping the paper around to read your list, “Looks like you need some help prioritising.” Riiiip.<br><br>The otter just ripped your carefully crafted list into pieces! “If you want to get these done, youre going to have to decide whats the most important first!” he says, tossing your list items into the breeze one at a time.", "questOtterNotes": "To-do lists are great! You can spend hours meticulously documenting each step you need to take and feel productive without actually doing those things. Your three-page list gets stuffed into your pocket. Time for a refreshing walk!<br><br>You depart towards the Routine River to take a stroll along the banks. This is exactly what you needed to finally get started! Time to take out your to-do list and—ah! A gust of wind has your list flying out of your hand and headed right for the water!<br><br>Right before the paper hits the water, an otter head pops up to the surface intercepting the sheets sure demise. Phew! He grasps the list in his paws and a mischievous grin spreads across his face… uh-oh.<br><br>“Hmm…” he hums, flipping the paper around to read your list, “Looks like you need some help prioritising.” Riiiip.<br><br>The otter just ripped your carefully crafted list into pieces! “If you want to get these done, youre going to have to decide whats the most important first!” he says, tossing your list items into the breeze one at a time.",
"questJadeNotes": "Youre in your home staring at the stack of dirty dishes in the sink. The pile of dirty laundry in a random corner of the room. The empty cups and snack wrappers around your desk...<br><br>You sigh. “Why are there always more dishes… ? The mess is never-ending. Its so demotivating.\" You find yourself dazing on the couch, mindlessly scrolling the latest trends. Who knows how long youve been there...<br><br>When you look up from your phone, everything is green. This isnt your living room. Standing up, you find yourself on the side of a shiny verdant mountain.<br><br>Movement in the distance draws your attention. A stony green figure grunts, pushing a boulder up the rocky terrain. He makes some progress, but a small slip of his foot has the shiny boulder rolling back down, right towards you!<br><br>He spots you as he runs towards the chunk of jade hurdling your way! “So you think the dishes are bad?” the figure shouts, “Try this!”", "questJadeNotes": "Youre in your home staring at the stack of dirty dishes in the sink; the pile of dirty laundry in a random corner of the room; the empty cups and snack wrappers around your desk<br><br>You sigh, “Why are there always more dishes…? The mess is never-ending. Its so demotivating. You find yourself dazing on the couch, mindlessly scrolling the latest trends. Who knows how long youve been there<br><br>When you look up from your phone, everything is green. This isnt your living room. Standing up, you find yourself on the side of a shiny verdant mountain.<br><br>Movement in the distance draws your attention. A stony green figure grunts, pushing a boulder up the rocky terrain. He makes some progress, but a small slip of his foot has the shiny boulder rolling back down, right towards you!<br><br>He spots you as he runs towards the chunk of jade hurdling your way! “So you think the dishes are bad?” the figure shouts, “Try this!”",
"questCatCompletion": "You've thankfully caught everything that pushy cat knocked off the table. As you sit on the floor you notice a bright glow coming from the objects in front of you. Looking up, the ones on the table are reacting too! Putting them at different elevations seems to be a breakthrough in your research!<br><br>\"You know, in the end you did help me. I guess I just needed some fresh eyes on my task to get me unstuck. I wish you would have given me a bit of a heads-up before you started pushing things around, though,\" you say to the cat, patting her gently.<br><br>\"That's a purrfectly reasonable request, please take these as my apology!\" she purrs, nudging some funny-looking eggs in your direction. \"I'm glad I could help you see things from a different purrspective.\"", "questCatCompletion": "You've thankfully caught everything that pushy cat knocked off the table. As you sit on the floor you notice a bright glow coming from the objects in front of you. Looking up, the ones on the table are reacting too! Putting them at different elevations seems to be a breakthrough in your research!<br><br>\"You know, in the end you did help me. I guess I just needed some fresh eyes on my task to get me unstuck. I wish you would have given me a bit of a heads-up before you started pushing things around, though,\" you say to the cat, patting her gently.<br><br>\"That's a purrfectly reasonable request, please take these as my apology!\" she purrs, nudging some funny-looking eggs in your direction. \"I'm glad I could help you see things from a different purrspective.\"",
"questOtterCompletion": "As you caught the pieces of your list you started sorting them by which tasks were the most important and ended up with quite a manageable place to start!<br><br>“I see!” you tell the otter, “that goofy stunt really did help me think about what tasks I needed to prioritise.”<br><br>The otter splashes about, rubbing its cheeks with glee, “Im glad my little plot got you thinking about your tasks in a different way.” He dives under the water, resurfacing nearby, “Remember to keep your lists achievable. Rewards help too, so take these!”", "questOtterCompletion": "As you caught the pieces of your list you started sorting them by which tasks were the most important and ended up with quite a manageable place to start!<br><br>“I see!” you tell the otter, “that goofy stunt really did help me think about what tasks I needed to prioritise.”<br><br>The otter splashes about, rubbing its cheeks with glee, “Im glad my little plot got you thinking about your tasks in a different way.” He dives under the water, resurfacing nearby, “Remember to keep your lists achievable. Rewards help too, so take these!”",
"questCatText": "A Purrplexing Predicament", "questCatText": "A Purrplexing Predicament",
@@ -845,10 +845,10 @@
"questAlpacaNotes": "The sun beams down as you hike up the rocky trailheads of the Meandering Mountains. Youve been planning this expedition for your friend group for months, researching every aspect of the trip. The weight of supplies on your back is so much to bear, each step feels more like a burden than an adventure.<br><br>You hear a soft crunch of hooves on the trail behind you. A fluffy alpaca approaches with a gigantic stack of luggage on her back.<br><br>“Seems like youre dragging a bit, friend, and all youre carrying is a little backpack!” she says as she passes by.<br><br>“You make it look so easy,” you sigh. “I planned this trip for so long, but now that were here, Im not even having fun…”<br><br>“Dont get down on yourself,” the alpaca snorts. “Ill teach you a lesson I learned long ago!” She bucks, and suddenly a bundled bedroll is flying at you! How is this helping again?!", "questAlpacaNotes": "The sun beams down as you hike up the rocky trailheads of the Meandering Mountains. Youve been planning this expedition for your friend group for months, researching every aspect of the trip. The weight of supplies on your back is so much to bear, each step feels more like a burden than an adventure.<br><br>You hear a soft crunch of hooves on the trail behind you. A fluffy alpaca approaches with a gigantic stack of luggage on her back.<br><br>“Seems like youre dragging a bit, friend, and all youre carrying is a little backpack!” she says as she passes by.<br><br>“You make it look so easy,” you sigh. “I planned this trip for so long, but now that were here, Im not even having fun…”<br><br>“Dont get down on yourself,” the alpaca snorts. “Ill teach you a lesson I learned long ago!” She bucks, and suddenly a bundled bedroll is flying at you! How is this helping again?!",
"questAlpacaCompletion": "Luckily none of the bags the alpaca threw your way were heavy, but your hands are definitely full. “What was that about?” you ask, annoyed.<br><br>“If youre planning a trip with friends, you shouldnt be carrying your burden alone! Im sure your friends would rather you shake off a few things onto them than for you to collapse under the weight by yourself. Anyway, you can hand me those bags back. Im a seasoned pack animal and Ive made my point,” she says with a wink. “But keep that blue bundle as a reward for a hard lesson learned. Ill see you at the peak!”", "questAlpacaCompletion": "Luckily none of the bags the alpaca threw your way were heavy, but your hands are definitely full. “What was that about?” you ask, annoyed.<br><br>“If youre planning a trip with friends, you shouldnt be carrying your burden alone! Im sure your friends would rather you shake off a few things onto them than for you to collapse under the weight by yourself. Anyway, you can hand me those bags back. Im a seasoned pack animal and Ive made my point,” she says with a wink. “But keep that blue bundle as a reward for a hard lesson learned. Ill see you at the peak!”",
"questPlatypusText": "The Perfectionist Platypus", "questPlatypusText": "The Perfectionist Platypus",
"questOpalNotes": "Habiticas scholars have long searched for the fabled Opal Magic Hatching Potion. A potion so powerful it imbues Pets and their Mount counterparts with fiery colour and brilliance unlike any other gemstone or precious metal. The magic of opals is even rumoured to enhance planning, insight, and creativity. What a boost that would be for your tasks!<br><br>After much searching, you may have finally uncovered the answer. Opal Potions require raw opal stones to be forged with the magic runes of Libra and Mercury. These ancient items can only be found in one place... the perilous ruins of the lost city, on the edge of the Timewaste Desert.<br><br>You arrive at the ruins after days of riding your strongest Mount through the harsh and remote terrain. Among the sun-bleached and broken stones you see a bright glimmer. The search begins!", "questOpalNotes": "Habiticas scholars have long searched for the fabled Opal Magic Hatching Potion: a potion so powerful it imbues Pets and their Mount counterparts with fiery colour and brilliance unlike any other gemstone or precious metal. The magic of opals is even rumoured to enhance planning, insight, and creativity. What a boost that would be for your tasks!<br><br>After much searching, you may have finally uncovered the answer. Opal Potions require raw opal stones to be forged with the magic runes of Libra and Mercury. These ancient items can only be found in one place the perilous ruins of the lost city, on the edge of the Timewaste Desert.<br><br>You arrive at the ruins after days of riding your strongest Mount through the harsh and remote terrain. Among the sun-bleached and broken stones you see a bright glimmer. The search begins!",
"questOpalCompletion": "At last, tired and dusty, you find the final runes and opal stone needed to forge the Magic Hatching Potion.<br><br>You begin the forging process the minute youre back in Habiticas main city. The power of the runes and opals fills your laboratory with rainbow light! In no time youve got three potions, and youre excited to hatch some new colourful pals.", "questOpalCompletion": "At last, tired and dusty, you find the final runes and opal stone needed to forge the Magic Hatching Potion.<br><br>You begin the forging process the minute youre back in Habiticas main city. The power of the runes and opals fills your laboratory with rainbow light! In no time youve got three potions, and youre excited to hatch some new colourful pals.",
"questPlatypusNotes": "Its a beautiful day at Conquest Creek, only made worse by the worksheet in your hand. Why do cool adventures always get ruined by homework? Youre five questions deep about river ecosystems when they hit you with an essay response.<br><br>“Describe how an animal may adapt to river dwelling? Ugh, I dont know...”<br><br>After spending 30 minutes hopelessly stuck on how to even start, you hear a lot of frustrated-sounding splashing down the bank.<br><br>“Augh,” a voice comes bubbling from just under the surface. A frazzled looking platypus pops up. “This burrow isnt coming together at all! Each time I start it just looks wrong.” She dives back under the surface and her broad, flat tail throws a mighty splash right into your face.<br><br>“Wait, dont throw it all away—” you shout, as another slosh of creek water hits you. You may be able to help, and get some inspiration along the way!", "questPlatypusNotes": "Its a beautiful day at Conquest Creek, only made worse by the worksheet in your hand. Why do cool adventures always get ruined by homework? Youre five questions deep into river ecosystems when they hit you with an essay response.<br><br>“Describe how an animal may adapt to river dwelling? Ugh, I dont know”<br><br>After spending 30 minutes hopelessly stuck on how to even start, you hear a lot of frustrated-sounding splashing down the bank.<br><br>“Augh,” a voice comes bubbling from just under the surface. A frazzled looking platypus pops up. “This burrow isnt coming together at all! Each time I start it just looks wrong.” She dives back under the surface and her broad, flat tail throws a mighty splash right into your face.<br><br>“Wait, dont throw it all away—” you shout, as another slosh of creek water hits you. You may be able to help, and get some inspiration along the way!",
"questPlatypusCompletion": "After an exhausting exchange of water blasts and some encouraging words from your end, the platypus finally stops and comes to the surface with a sigh.<br><br>“You may be right. If I demand flawlessness Im just never going to finish! I can always make adjustments as I go. Seems like you know a little something about perfectionism.”<br><br>You look at your soggy worksheet “Yeah...”<br><br>“Sorry about that,” the platypus says. “Here, as an apology for getting your essay wet, please take some eggs I found in the mud.”", "questPlatypusCompletion": "After an exhausting exchange of water blasts and some encouraging words from your end, the platypus finally stops and comes to the surface with a sigh.<br><br>“You may be right. If I demand flawlessness Im just never going to finish! I can always make adjustments as I go. Seems like you know a little something about perfectionism.”<br><br>You look at your soggy worksheet “Yeah”<br><br>“Sorry about that,” the platypus says, “Here, as an apology for getting your essay wet, please take some eggs I found in the mud.”",
"questPlatypusBoss": "The Perfectionist Platypus", "questPlatypusBoss": "The Perfectionist Platypus",
"questPlatypusRageTitle": "Shocking Splash", "questPlatypusRageTitle": "Shocking Splash",
"questPlatypusRageDescription": "This bar fills when you don't complete your Dailies. When it's full, the Perfectionist Platypus will take away some of your party's MP!", "questPlatypusRageDescription": "This bar fills when you don't complete your Dailies. When it's full, the Perfectionist Platypus will take away some of your party's MP!",
+3 -3
View File
@@ -48,7 +48,7 @@
"resetText1": "<b>Be careful!</b> This resets many parts of your account. This is highly discouraged, but some people find it useful in the beginning after playing with the site for a short time.", "resetText1": "<b>Be careful!</b> This resets many parts of your account. This is highly discouraged, but some people find it useful in the beginning after playing with the site for a short time.",
"resetText2": "Another option is using an <b>Orb of Rebirth</b>, which will reset everything else while preserving your Tasks and Equipment.", "resetText2": "Another option is using an <b>Orb of Rebirth</b>, which will reset everything else while preserving your Tasks and Equipment.",
"deleteLocalAccountText": "<b>Are you sure?</b> This will delete your account forever, and it can never be restored! You will need to register a new account to use Habitica again. Banked or spent Gems will not be refunded. If you're absolutely certain, type your password into the text box below.", "deleteLocalAccountText": "<b>Are you sure?</b> This will delete your account forever, and it can never be restored! You will need to register a new account to use Habitica again. Banked or spent Gems will not be refunded. If you're absolutely certain, type your password into the text box below.",
"deleteSocialAccountText": "<b>Are you sure?</b> This will delete your account forever, and it can never be restored! You will need to register a new account to use Habitica again. Banked or spent Gems will not be refunded. If you're absolutely certain, type <b>\"<%= magicWord %>\"</b> into the text box below.", "deleteSocialAccountText": "<b>Are you sure?</b> This will delete your account forever, and it can never be restored! You will need to register a new account to use Habitica again. Banked or spent Gems will not be refunded. If youre absolutely certain, type <b><%= magicWord %></b> into the text box below.",
"API": "API", "API": "API",
"APIv3": "API v3", "APIv3": "API v3",
"APIText": "Copy these for use in third party applications. However, think of your API Token like a password, and do not share it publicly. You may occasionally be asked for your User ID, but never post your API Token where others can see it, including on Github.", "APIText": "Copy these for use in third party applications. However, think of your API Token like a password, and do not share it publicly. You may occasionally be asked for your User ID, but never post your API Token where others can see it, including on Github.",
@@ -100,7 +100,7 @@
"unsubscribeAllEmails": "Unsubscribe from E-mails", "unsubscribeAllEmails": "Unsubscribe from E-mails",
"unsubscribeAllEmailsText": "Habitica will be unable to notify you via e-mail about important changes to the site or your account.", "unsubscribeAllEmailsText": "Habitica will be unable to notify you via e-mail about important changes to the site or your account.",
"unsubscribeAllPush": "Unsubscribe from all Push Notifications", "unsubscribeAllPush": "Unsubscribe from all Push Notifications",
"correctlyUnsubscribedEmailType": "Correctly unsubscribed from \"<%= emailType %>\" e-mails.", "correctlyUnsubscribedEmailType": "Correctly unsubscribed from <%= emailType %> e-mails.",
"subscriptionRateText": "Recurring <strong>$<%= price %> USD</strong> every <strong><%= months %> months</strong>", "subscriptionRateText": "Recurring <strong>$<%= price %> USD</strong> every <strong><%= months %> months</strong>",
"benefits": "Benefits", "benefits": "Benefits",
"coupon": "Coupon", "coupon": "Coupon",
@@ -194,7 +194,7 @@
"connect": "Connect", "connect": "Connect",
"remove": "Remove", "remove": "Remove",
"resetTextLocal": "If you're absolutely certain, type your password into the text box below.", "resetTextLocal": "If you're absolutely certain, type your password into the text box below.",
"resetTextSocial": "If you're absolutely certain, type <b>\"<%= magicWord %>\"</b> into the text box below.", "resetTextSocial": "If youre absolutely certain, type <b><%= magicWord %></b> into the text box below.",
"APITokenDisclaimer": "<b>Your API Token is like a password; Do not share it publicly.</b> You may occasionally be asked for your User ID, but never post your API Token where others can see it, including on Github.<br><br><b>If you need a new API Token</b> (e.g., if you accidentally shared it), you can change your password to reset it. Once it is reset, you will need to log back in to any other devices you use Habitica on and provide the new API Token to third-party tools you may use.", "APITokenDisclaimer": "<b>Your API Token is like a password; Do not share it publicly.</b> You may occasionally be asked for your User ID, but never post your API Token where others can see it, including on Github.<br><br><b>If you need a new API Token</b> (e.g., if you accidentally shared it), you can change your password to reset it. Once it is reset, you will need to log back in to any other devices you use Habitica on and provide the new API Token to third-party tools you may use.",
"audioThemeDisclaimer": "Audio themes add optional sound effects to the Habitica website. Volume levels are controlled using your computer's volume settings.", "audioThemeDisclaimer": "Audio themes add optional sound effects to the Habitica website. Volume levels are controlled using your computer's volume settings.",
"gemCap": "Gem Cap", "gemCap": "Gem Cap",
+1 -1
View File
@@ -49,7 +49,7 @@
"spellSpecialSandText": "Sand", "spellSpecialSandText": "Sand",
"spellSpecialSandNotes": "Reverse the spell that made you a sea star.", "spellSpecialSandNotes": "Reverse the spell that made you a sea star.",
"partyNotFound": "Party not found", "partyNotFound": "Party not found",
"targetIdUUID": "\"targetId\" must be a valid User ID.", "targetIdUUID": "targetId must be a valid User ID.",
"challengeTasksNoCast": "Casting a skill on challenge tasks is not allowed.", "challengeTasksNoCast": "Casting a skill on challenge tasks is not allowed.",
"groupTasksNoCast": "Casting a skill on group tasks is not allowed.", "groupTasksNoCast": "Casting a skill on group tasks is not allowed.",
"spellNotOwned": "You don't own this skill.", "spellNotOwned": "You don't own this skill.",
+8 -8
View File
@@ -2,7 +2,7 @@
"clearCompleted": "Delete Completed", "clearCompleted": "Delete Completed",
"clearCompletedDescription": "Completed To Do's are deleted after 30 days for non-subscribers and 90 days for subscribers.", "clearCompletedDescription": "Completed To Do's are deleted after 30 days for non-subscribers and 90 days for subscribers.",
"clearCompletedConfirm": "Are you sure you want to delete your completed To Do's?", "clearCompletedConfirm": "Are you sure you want to delete your completed To Do's?",
"addMultipleTip": "<strong>Tip:</strong> To add multiple <%= taskType %>, separate each one using a line break (Shift + Enter) and then press \"Enter.\"", "addMultipleTip": "<strong>Tip:</strong> To add multiple <%= taskType %>, separate each one using a line break (Shift + Enter) and then press Enter.",
"addATask": "Add a <%= type %>", "addATask": "Add a <%= type %>",
"editATask": "Edit <%= type %>", "editATask": "Edit <%= type %>",
"createTask": "Create <%= type %>", "createTask": "Create <%= type %>",
@@ -66,7 +66,7 @@
"price": "Price", "price": "Price",
"tags": "Tags", "tags": "Tags",
"newTag": "New Tag", "newTag": "New Tag",
"toRequired": "You must supply a \"to\" property", "toRequired": "You must supply a “to” property",
"startDate": "Start Date", "startDate": "Start Date",
"streaks": "Streak Achievements", "streaks": "Streak Achievements",
"streakName": "<%= count %> Streak Achievements", "streakName": "<%= count %> Streak Achievements",
@@ -85,16 +85,16 @@
"taskToTop": "To top", "taskToTop": "To top",
"taskToBottom": "To bottom", "taskToBottom": "To bottom",
"taskAliasAlreadyUsed": "Task alias already used on another task.", "taskAliasAlreadyUsed": "Task alias already used on another task.",
"invalidTaskType": "Task type must be one of \"habit\", \"daily\", \"todo\", \"reward\".", "invalidTaskType": "Task type must be one of habit”, “daily”, “todo”, “reward.",
"invalidTasksType": "Task type must be one of \"habits\", \"dailys\", \"todos\", \"rewards\".", "invalidTasksType": "Task type must be one of habits”, “dailys”, “todos”, “rewards.",
"invalidTasksTypeExtra": "Task type must be one of \"habits\", \"dailys\", \"todos\", \"rewards\", \"completedTodos\".", "invalidTasksTypeExtra": "Task type must be one of habits”, “dailys”, “todos”, “rewards”, “completedTodos.",
"cantDeleteChallengeTasks": "A task belonging to a challenge can't be deleted.", "cantDeleteChallengeTasks": "A task belonging to a challenge can't be deleted.",
"checklistOnlyDailyTodo": "Checklists are supported only on Dailies and To Do's", "checklistOnlyDailyTodo": "Checklists are supported only on Dailies and To Do's",
"checklistItemNotFound": "No checklist item was found with given id.", "checklistItemNotFound": "No checklist item was found with given id.",
"itemIdRequired": "\"itemId\" must be a valid UUID.", "itemIdRequired": "itemId must be a valid UUID.",
"tagNotFound": "No tag item was found with given ID.", "tagNotFound": "No tag item was found with given ID.",
"tagIdRequired": "\"tagId\" must be a valid UUID corresponding to a tag belonging to the user.", "tagIdRequired": "tagId must be a valid UUID corresponding to a tag belonging to the user.",
"positionRequired": "\"position\" is required and must be a number.", "positionRequired": "position is required and must be a number.",
"cantMoveCompletedTodo": "Can't move a completed to-do.", "cantMoveCompletedTodo": "Can't move a completed to-do.",
"alreadyTagged": "The task is already tagged with given tag.", "alreadyTagged": "The task is already tagged with given tag.",
"taskRequiresApproval": "This task must be approved before you can complete it. Approval has already been requested", "taskRequiresApproval": "This task must be approved before you can complete it. Approval has already been requested",
+2 -1
View File
@@ -410,5 +410,6 @@
"questEggPlatypusMountText": "Marsupial", "questEggPlatypusMountText": "Marsupial",
"hatchingPotionOpal": "Ópalo", "hatchingPotionOpal": "Ópalo",
"questEggPlatypusText": "Ornitorrinco", "questEggPlatypusText": "Ornitorrinco",
"questEggPlatypusAdjective": "meticulosa" "questEggPlatypusAdjective": "meticulosa",
"hatchingPotionAlien": "extraterrestre"
} }
+4 -2
View File
@@ -110,7 +110,7 @@
"missingPassword": "Falta la contraseña.", "missingPassword": "Falta la contraseña.",
"missingNewPassword": "Falta una nueva contraseña.", "missingNewPassword": "Falta una nueva contraseña.",
"invalidEmailDomain": "No puedes registrar con emails con los siguientes dominios: <%= domains %>", "invalidEmailDomain": "No puedes registrar con emails con los siguientes dominios: <%= domains %>",
"wrongPassword": "Contraseña errónea. Si has olvidado tu contraseña, haz clic en \"He olvidado la contraseña\".", "wrongPassword": "Contraseña incorrecta. Si has olvidado tu contraseña, haz clic en \"He olvidado mi contraseña.\"",
"incorrectDeletePhrase": "Por favor, teclea <%= magicWord %> en mayúsculas para eliminar tu cuenta.", "incorrectDeletePhrase": "Por favor, teclea <%= magicWord %> en mayúsculas para eliminar tu cuenta.",
"notAnEmail": "La dirección de correo electrónico no es válida.", "notAnEmail": "La dirección de correo electrónico no es válida.",
"emailTaken": "Ya existe una cuenta con esa dirección de correo electrónico.", "emailTaken": "Ya existe una cuenta con esa dirección de correo electrónico.",
@@ -187,5 +187,7 @@
"minPasswordLengthLogin": "Tu contraseña contiene al menos 8 caracteres.", "minPasswordLengthLogin": "Tu contraseña contiene al menos 8 caracteres.",
"enterValidEmail": "Por favor introduce una dirección de correo electrónico válida.", "enterValidEmail": "Por favor introduce una dirección de correo electrónico válida.",
"whatToCallYou": "¿Cómo debemos llamarte?", "whatToCallYou": "¿Cómo debemos llamarte?",
"acceptPrivacyTOS": "Confirmas que tienes al menos 18 años y que has leído y estás de acuerdo con nuestros <a href='/static/terms' target='_blank'>Terminos de Servicio</a>y<a href='/static/privacy' target='_blank'>Política de Privacidad</a>" "acceptPrivacyTOS": "Confirmas que tienes al menos 18 años y que has leído y estás de acuerdo con nuestros <a href='/static/terms' target='_blank'>Terminos de Servicio</a>y<a href='/static/privacy' target='_blank'>Política de Privacidad</a>",
"emailAddress": "Dirección de correo electrónico",
"emailRequiredForSupport": "Necesitamos una dirección de correo electrónico para brindarte asistencia. Por favor, introduce una dirección de correo electrónico para continuar creando tu cuenta."
} }
+3 -1
View File
@@ -243,5 +243,7 @@
"targetUserNotExist": "Usuario objetivo: '<%= userName %>' no existe.", "targetUserNotExist": "Usuario objetivo: '<%= userName %>' no existe.",
"rememberToBeKind": "Por favor recuerda ser bondadoso, respetuoso y seguir las <a href='/static/community-guidelines' target='_blank'>Normas de la Comunidad</a>.", "rememberToBeKind": "Por favor recuerda ser bondadoso, respetuoso y seguir las <a href='/static/community-guidelines' target='_blank'>Normas de la Comunidad</a>.",
"gem": "Gema", "gem": "Gema",
"confirmPurchase": "Confirmar Compra" "confirmPurchase": "Confirmar Compra",
"avoidSPI": "Evita IPS",
"avoidSPIDetails": "Por tu privacidad, evita incluir <%= firstLink %>información personal sensible<%= linkClose %> (IPS) cuando uses Habitica. La información de tu cuenta, incluyendo tareas, es almacenada en nuestros servidores para que puedas acceder a ella desde cualquier dispositivo.<br><br>Para saber más, revisa nuestra <%= secondLink %>Política de Privacidad<%= linkClose %>."
} }
+1 -1
View File
@@ -55,7 +55,7 @@
"faqQuestion25": "Quels sont les différents types de tâches ?", "faqQuestion25": "Quels sont les différents types de tâches ?",
"faqQuestion26": "Quels sont des exemples de tâches ?", "faqQuestion26": "Quels sont des exemples de tâches ?",
"webFaqAnswer25": "Habitica utilise trois types de tâches différentes pour s'accorder à différentes tâche : les Habitudes, les Quotidiennes, et les À Faire.\n\nLes Habitudes peuvent être positives ou négatives et représentent quelque chose que vous pourriez vouloir suivre plusieurs fois par jour, ou sur un temps donné. Les Habitudes Positives vous offriront des récompenses, comme de l'Or et de l'Expérience (XP), tandis que les Habitudes Négatives vous feront perdre des points de vie (PV).\n\nLes Quotidiennes sont des tâches que vous souhaitez accomplir plusieurs fois. Par exemple, une fois par jour, trois fois dans la semaine, ou quatre fois par mois. Ne pas accomplir des Quotidiennes vous fera perdre des points de vie, mais plus elles sont difficiles, meilleures sont les récompenses !\n\nLes À Faire sont des tâches ponctuelles qui offrent des récompenses après que vous les ayez accomplies. Les À Faire peuvent avoir une date d'échéance, mais vous ne perdrez pas de points de vie si vous ne la respectez pas.\n\nÀ vous de choisir quel type de tâche correspond le mieux à ce que vous souhaitez accomplir !", "webFaqAnswer25": "Habitica utilise trois types de tâches différentes pour s'accorder à différentes tâche : les Habitudes, les Quotidiennes, et les À Faire.\n\nLes Habitudes peuvent être positives ou négatives et représentent quelque chose que vous pourriez vouloir suivre plusieurs fois par jour, ou sur un temps donné. Les Habitudes Positives vous offriront des récompenses, comme de l'Or et de l'Expérience (XP), tandis que les Habitudes Négatives vous feront perdre des points de vie (PV).\n\nLes Quotidiennes sont des tâches que vous souhaitez accomplir plusieurs fois. Par exemple, une fois par jour, trois fois dans la semaine, ou quatre fois par mois. Ne pas accomplir des Quotidiennes vous fera perdre des points de vie, mais plus elles sont difficiles, meilleures sont les récompenses !\n\nLes À Faire sont des tâches ponctuelles qui offrent des récompenses après que vous les ayez accomplies. Les À Faire peuvent avoir une date d'échéance, mais vous ne perdrez pas de points de vie si vous ne la respectez pas.\n\nÀ vous de choisir quel type de tâche correspond le mieux à ce que vous souhaitez accomplir !",
"webFaqAnswer26": "Habitudes Positives (Comportements que vous souhaitez encourager ; doit avoir un bouton \"plus\")\n\n * Prendre des vitamines\n * Se passer du fil dentaire\n * Étudier pendant une heure\n\nHabitudes Négatives (Comportements que vous souhaitez limiter ou éviter ; doit avoir un bouton \"moins\")\n\n * Fumer\n * Regarder des infos négatives en boucle sur Internet\n * Se ronger les ongles\n\nHabitudes Duelles (Habitudes qui incluent une option positive ou négative ; doit avoir un bouton \"moins\" et un bouton \"plus\")\n\n * Boire de l'eau vs Boire du soda\n * Étudier vs Procrastiner\n\nExemple de Quotidiennes (Tâches que vous souhaitez répéter régulièrement)\n\n * Faire la vaisselle\n * Arroser les plantes\n * 30 minutes d'activité physique\n\nExemple de À Faire (Tâches que vous n'avez à faire qu'une fois)\n\n * Prendre un rendez-vous\n * Organiser la penderie\n * Finir une dissertation", "webFaqAnswer26": "Habitudes Positives (Comportements que vous souhaitez encourager ; doit avoir un bouton \"plus\")\n\n * Prendre des vitamines\n * Se passer du fil dentaire\n * Étudier pendant une heure\n\nHabitudes Négatives (Comportements que vous souhaitez limiter ou éviter ; doit avoir un bouton \"moins\")\n\n * Fumer\n * Regarder des infos négatives en boucle sur Internet\n * Se ronger les ongles\n\nHabitudes Duelles (Habitudes qui incluent une option positive ou négative ; doit avoir à la fois un bouton \"moins\" et un bouton \"plus\")\n\n * Boire de l'eau vs boire du soda\n * Étudier vs procrastiner\n\nExemple de Quotidiennes (Tâches que vous souhaitez répéter régulièrement)\n * Faire la vaisselle\n * Arroser les plantes\n * 30 minutes d'activité physique\n\nExemple de À Faire (Tâches que vous n'avez à faire qu'une fois)\n\n * Prendre un rendez-vous\n * Organiser la penderie\n * Finir une dissertation",
"faqQuestion27": "Pourquoi les tâches changent-elles de couleur ?", "faqQuestion27": "Pourquoi les tâches changent-elles de couleur ?",
"faqQuestion28": "Puis-je mettre mes Quotidiennes en suspens si j'ai besoin d'une pause ?", "faqQuestion28": "Puis-je mettre mes Quotidiennes en suspens si j'ai besoin d'une pause ?",
"webFaqAnswer28": "Oui ! Le bouton \"Désactiver les Dégâts\" se trouve dans les Paramètres. Cette option vous permettra de ne pas perdre de points de vie en manquant vos Quotidiennes. C'est pratique lorsque vous êtes en vacances, quand vous avez besoin de repos, ou pour n'importe quelle autre raison. Si vous être en train de participer à une Quête, votre progression en attente sera mise en pause, mais vous prendrez toujours des dégâts liés au manquement des Quotidiennes de vos Coéquipier·ère·s.\n\nPour mettre en pause des Quotidiennes en particulier, vous pouvez éditer la programmation des jours dûs à 0 jusqu'à ce que vous soyez prêt·e à reprendre.", "webFaqAnswer28": "Oui ! Le bouton \"Désactiver les Dégâts\" se trouve dans les Paramètres. Cette option vous permettra de ne pas perdre de points de vie en manquant vos Quotidiennes. C'est pratique lorsque vous êtes en vacances, quand vous avez besoin de repos, ou pour n'importe quelle autre raison. Si vous être en train de participer à une Quête, votre progression en attente sera mise en pause, mais vous prendrez toujours des dégâts liés au manquement des Quotidiennes de vos Coéquipier·ère·s.\n\nPour mettre en pause des Quotidiennes en particulier, vous pouvez éditer la programmation des jours dûs à 0 jusqu'à ce que vous soyez prêt·e à reprendre.",
+2 -2
View File
@@ -110,7 +110,7 @@
"missingPassword": "Mot de passe manquant.", "missingPassword": "Mot de passe manquant.",
"missingNewPassword": "Nouveau mot de passe manquant.", "missingNewPassword": "Nouveau mot de passe manquant.",
"invalidEmailDomain": "Vous ne pouvez pas vous enregistrer avec une adresse courriel appartenant aux domaines suivants : <%= domains %>", "invalidEmailDomain": "Vous ne pouvez pas vous enregistrer avec une adresse courriel appartenant aux domaines suivants : <%= domains %>",
"wrongPassword": "Votre mot de passe est incorrect. Si vous avez oublié votre mot de passe, cliquez sur \"Mot de Passe oublié\".", "wrongPassword": "Votre mot de passe est incorrect. Si vous avez oublié votre mot de passe, cliquez sur \"Mot de Passe oublié.\"",
"incorrectDeletePhrase": "Veuillez taper <%= magicWord %> en majuscules pour supprimer votre compte.", "incorrectDeletePhrase": "Veuillez taper <%= magicWord %> en majuscules pour supprimer votre compte.",
"notAnEmail": "Adresse courriel invalide.", "notAnEmail": "Adresse courriel invalide.",
"emailTaken": "Adresse courriel déjà utilisée par un utilisateur.", "emailTaken": "Adresse courriel déjà utilisée par un utilisateur.",
@@ -122,7 +122,7 @@
"passwordConfirmationMatch": "La confirmation du mot de passe ne correspond pas au mot de passe.", "passwordConfirmationMatch": "La confirmation du mot de passe ne correspond pas au mot de passe.",
"passwordResetPage": "Réinitialiser le mot de passe", "passwordResetPage": "Réinitialiser le mot de passe",
"passwordReset": "Si nous avons votre courriel ou votre identifiant dans nos fichiers, un nouveau mot de passe vous a été envoyé.", "passwordReset": "Si nous avons votre courriel ou votre identifiant dans nos fichiers, un nouveau mot de passe vous a été envoyé.",
"invalidLoginCredentialsLong": "Votre email, identifiant ou mot de passe est incorrect. Merci de réessayer ou de faire \"Mot de passe oublié\".", "invalidLoginCredentialsLong": "Votre email, identifiant ou mot de passe est incorrect. Merci de réessayer ou de faire \"Mot de passe oublié.\"",
"invalidCredentials": "Aucun compte n'utilise cet identifiant.", "invalidCredentials": "Aucun compte n'utilise cet identifiant.",
"accountSuspended": "Votre compte @<%= username %> a été bloqué. Pour plus d'informations ou pour faire appel de la décision, merci de nous contacter à admin@habitica.com en indiquant votre identifiant Habitica ou votre ID d'Utilisat·eur·rice.", "accountSuspended": "Votre compte @<%= username %> a été bloqué. Pour plus d'informations ou pour faire appel de la décision, merci de nous contacter à admin@habitica.com en indiquant votre identifiant Habitica ou votre ID d'Utilisat·eur·rice.",
"accountSuspendedTitle": "Le compte a été suspendu", "accountSuspendedTitle": "Le compte a été suspendu",
+1 -1
View File
@@ -893,7 +893,7 @@
"backgrounds022025": "SET 129: rilasciato a febbraio 2025", "backgrounds022025": "SET 129: rilasciato a febbraio 2025",
"backgroundOldFashionedTeaShopText": "Antico Negozio di Tè", "backgroundOldFashionedTeaShopText": "Antico Negozio di Tè",
"backgroundOldFashionedTeaShopNotes": "Gustati una piacevole bevanda nell'Antico Negozio di Tè.", "backgroundOldFashionedTeaShopNotes": "Gustati una piacevole bevanda nell'Antico Negozio di Tè.",
"backgroundWinterLandscapeWithCabinNotes": "Rimani comodo/a nel Paesaggio Invernale con una Baita.", "backgroundWinterLandscapeWithCabinNotes": "Resta al caldo nel Paesaggio Invernale con una Baita.",
"backgroundWinterLandscapeWithCabinText": "Paesaggio Invernale con Baita", "backgroundWinterLandscapeWithCabinText": "Paesaggio Invernale con Baita",
"backgrounds032025": "SET 130: rilasciato a marzo 2025", "backgrounds032025": "SET 130: rilasciato a marzo 2025",
"backgroundMountainSceneWithBlossomsText": "Scena Montana con Fiori", "backgroundMountainSceneWithBlossomsText": "Scena Montana con Fiori",
+2 -2
View File
@@ -844,8 +844,8 @@
"questOtterNotes": "Le liste delle Cose da Fare sono ottime! Puoi passare ore a documentare meticolosamente ogni passo che devi compiere e sentirti produttivo senza effettivamente fare quelle cose. La tua lista di tre pagine finisce così nella tua tasca. È arrivato il momento di fare una passeggiata rigenerante!<br><br>Ti dirigi verso il Fiume della Routine per fare una passeggiata lungo la riva. Era proprio quello che ti serviva per poter iniziare! È ora di tirare fuori la tua lista di Cose da Fare e... ah! Una folata di vento fa volare la tua lista dalle tue mani, dritta verso l'acqua!<br><br>Proprio un attimo prima che il foglio si possa bagnare, la testa di una lontra spunta in superficie, intercettando la traiettoria del foglio. Menomale! Afferra la lista con le zampe e un sorriso malizioso le si dipinge sul muso... uh-oh.<br><br>\"Mmh\", canticchia, girando il foglio per leggere la tua lista. \"Sembra che tu abbia bisogno di aiuto per stabilire le tue priorità.\" Riiiip.<br><br>La lontra ha appena fatto a pezzi la tua lista accuratamente preparata! \"Se vuoi portare a termine questi compiti, devi prima decidere qual è il più importante!\" dice, gettando in aria uno alla volta gli elementi della tua lista.", "questOtterNotes": "Le liste delle Cose da Fare sono ottime! Puoi passare ore a documentare meticolosamente ogni passo che devi compiere e sentirti produttivo senza effettivamente fare quelle cose. La tua lista di tre pagine finisce così nella tua tasca. È arrivato il momento di fare una passeggiata rigenerante!<br><br>Ti dirigi verso il Fiume della Routine per fare una passeggiata lungo la riva. Era proprio quello che ti serviva per poter iniziare! È ora di tirare fuori la tua lista di Cose da Fare e... ah! Una folata di vento fa volare la tua lista dalle tue mani, dritta verso l'acqua!<br><br>Proprio un attimo prima che il foglio si possa bagnare, la testa di una lontra spunta in superficie, intercettando la traiettoria del foglio. Menomale! Afferra la lista con le zampe e un sorriso malizioso le si dipinge sul muso... uh-oh.<br><br>\"Mmh\", canticchia, girando il foglio per leggere la tua lista. \"Sembra che tu abbia bisogno di aiuto per stabilire le tue priorità.\" Riiiip.<br><br>La lontra ha appena fatto a pezzi la tua lista accuratamente preparata! \"Se vuoi portare a termine questi compiti, devi prima decidere qual è il più importante!\" dice, gettando in aria uno alla volta gli elementi della tua lista.",
"questJadeNotes": "Ti trovi a casa tua e fissi la pila di piatti sporchi nel lavandino. Il mucchio di biancheria, anch'essa sporca, in un angolo a caso della stanza. I bicchieri vuoti e i le bustine degli snack sparsi sulla scrivania...<br><br>Sospiri. \"Perché ci sono sempre più piatti da lavare...? Questo disordine non ha fine.\" È così demotivante. Ti ritrovi a sprofondare sul divano, scorrendo senza meta le ultime tendenze. Chissà da quanto tempo sei lì...<br><br>Quando alzi lo sguardo dal telefono, tutto è verde. Questo non è il tuo salotto. Ti alzi e ti ritrovi sul fianco di una montagna verdeggiante e scintillante.<br><br>Un movimento in lontananza attira la tua attenzione. Una figura verde e pietrosa grugnisce, spingendo un masso su per il terreno roccioso. Fa qualche progresso, ma un piccolo scivolone del piede fa rotolare il masso lucido giù, proprio verso di te!<br><br>Ti vede mentre corre verso il pezzo di giada che ti salta addosso! \"Allora, pensi che i piatti siano un problema?\" la figura grida: \"Provate questo!\"", "questJadeNotes": "Ti trovi a casa tua e fissi la pila di piatti sporchi nel lavandino. Il mucchio di biancheria, anch'essa sporca, in un angolo a caso della stanza. I bicchieri vuoti e i le bustine degli snack sparsi sulla scrivania...<br><br>Sospiri. \"Perché ci sono sempre più piatti da lavare...? Questo disordine non ha fine.\" È così demotivante. Ti ritrovi a sprofondare sul divano, scorrendo senza meta le ultime tendenze. Chissà da quanto tempo sei lì...<br><br>Quando alzi lo sguardo dal telefono, tutto è verde. Questo non è il tuo salotto. Ti alzi e ti ritrovi sul fianco di una montagna verdeggiante e scintillante.<br><br>Un movimento in lontananza attira la tua attenzione. Una figura verde e pietrosa grugnisce, spingendo un masso su per il terreno roccioso. Fa qualche progresso, ma un piccolo scivolone del piede fa rotolare il masso lucido giù, proprio verso di te!<br><br>Ti vede mentre corre verso il pezzo di giada che ti salta addosso! \"Allora, pensi che i piatti siano un problema?\" la figura grida: \"Provate questo!\"",
"questJadeCompletion": "Dopo innumerevoli intoppi, sei finalmente riuscito a far rotolare il masso di giada fino alla cima della montagna! La figura di pietra ti raggiunge e sorride. Dà una leggera spinta al masso e tu guardi con orrore mentre rotola fino in fondo.<br><br>“Perché l'hai fatto? Qualcuno dovrà rispingerlo qui tutto da capo adesso!” esclami.<br><br>“Solo perché devi fare qualcosa più di una volta non significa che i tuoi successi siano insignificanti”, dice la figura di pietra. “Per ora, concentrati su ciò che hai ottenuto e goditi la ricompensa!”<br><br>Ti svegli di soprassalto sul divano, con il telefono caduto a terra. Al suo posto ci sono tre bottiglie piene di giada fluida! Forse è ora di lavare i piatti di oggi e poi fare una pausa per vedere come queste pozioni funzionino su alcune uova di animali domestici...", "questJadeCompletion": "Dopo innumerevoli intoppi, sei finalmente riuscito a far rotolare il masso di giada fino alla cima della montagna! La figura di pietra ti raggiunge e sorride. Dà una leggera spinta al masso e tu guardi con orrore mentre rotola fino in fondo.<br><br>“Perché l'hai fatto? Qualcuno dovrà rispingerlo qui tutto da capo adesso!” esclami.<br><br>“Solo perché devi fare qualcosa più di una volta non significa che i tuoi successi siano insignificanti”, dice la figura di pietra. “Per ora, concentrati su ciò che hai ottenuto e goditi la ricompensa!”<br><br>Ti svegli di soprassalto sul divano, con il telefono caduto a terra. Al suo posto ci sono tre bottiglie piene di giada fluida! Forse è ora di lavare i piatti di oggi e poi fare una pausa per vedere come queste pozioni funzionino su alcune uova di animali domestici...",
"questAlpacaNotes": "Il sole splende trionfante mentre sali lungo i sentieri rocciosi delle Montagne Tortuose. Hai pianificato questa spedizione per il tuo gruppo di amici per mesi, studiando ogni aspetto del viaggio. Il peso delle provviste sulle tue spalle è così gravoso che ogni passo sembra più essere un fardello che un'avventura.<br><br>Senti un leggero scricchiolio di zoccoli sul sentiero dietro di te. Un alpaca soffice ti si avvicina con un'enorme pila di bagagli sulla groppa.<br><br>\"Sembra che tu stia facendo fatica, amico, e tutto quello che porti è solo uno zaino minuscolo!\" dice mentre ti passa accanto.<br><br>\"Lo fai sembrare così facile,\" sospiri. \"Ho pianificato questo viaggio per così tanto tempo, ma ora che siamo qui, non mi sto neppure divertendo...\"<br><br>\"Non scoraggiarti,\" sbuffa l'alpaca. \"Ti insegnerò una lezione che ho imparato molto tempo fa!\" Si impenna e all'improvviso un sacco a pelo arrotolato ti vola addosso! Come mai potrà aiutarti questo, di nuovo?!", "questAlpacaNotes": "Il sole trionfa lungo i sentieri rocciosi delle Montagne Tortuose. Da mesi avevi pianificato, in ogni minimo dettaglio, questa spedizione da fare con gli amici. Il peso delle provviste, tuttavia, gravava su ogni tuo passo, quando senti un leggero scricchiolio di zoccoli dietro di te. Un alpaca morbidoso ti si avvicina con un'enorme pila di bagagli sulla groppa.<br><br>\"Stai facendo fatica? Oh, e tutto ciò che hai è quello zaino minuscolo!\" dice passandoti accanto.<br><br>\"Lo fai sembrare così facile,\" sospiri. \"Ho organizzato questo viaggio per così tanto tempo, ma ora che siamo qui neanche mi diverto...\"<br><br>\"Non scoraggiarti,\" ribatte l'alpaca. \"Ti insegnerò io una lezione che farà al caso tuo!\" e subito dopo s'impenna e un sacco a pelo arrotolato ti vola addosso! Come mai potrà aiutarti questo, di nuovo?!",
"questAlpacaCompletion": "Per fortuna nessuna delle borse che l'alpaca ti ha lanciato era pesante, ma avevi comunque le mani decisamente occupate. \"E quello che cos'era?\" chiedi, infastidito.<br><br>\"Se hai in programma un viaggio con gli amici, non dovresti portare tutto il tuo fardello da solo! Sono sicura che i tuoi amici preferirebbero che tu ti liberassi di qualche peso per darli a loro, piuttosto che vederti crollare sotto quel peso da solo. Comunque, puoi restituirmi quelle borse. Sono un animale da soma esperto e volevo solo che capissi questa lezione\", dice facendo l'occhiolino. \"Ma puoi tenere quel fagotto blu come ricompensa per ciò che hai appena appreso. Ci vediamo in cima!\"", "questAlpacaCompletion": "Per fortuna nessuna delle borse che l'alpaca ti ha lanciato era pesante, ma avevi comunque le mani occupate. \"E quello cos'era?\"<br><br>\"Quando hai in programma un viaggio con gli amici, non dovresti portare tutto quel peso da solo! Sono sicura che i tuoi amici si offrirebbero per portare qualcosa anche loro, piuttosto che vederti schiacciare. Comunque, puoi restituirmi quelle borse. Sono un animale da soma esperto e volevo solo tu capissi questa lezione\", dice facendo l'occhiolino. \"Ma puoi tenere quel fagotto blu come ricompensa. Allora ci si vede in cima!\"",
"questPlatypusNotes": "È una splendida giornata a Conquest Creek, resa solamente peggiore dal foglio di lavoro che hai in mano. Perché le avventure più belle vengono sempre rovinate dai compiti? Sei a cinque domande sugli ecosistemi fluviali quando ti ritrovi con una domanda a risposta aperta.<br><br>“Descrivi come un animale potrebbe adattarsi a vivere in un fiume? Uff, non lo so...”<br><br>Dopo aver passato 30 minuti bloccato senza sapere nemmeno da dove iniziare, senti un sacco di schizzi provenire dalla riva.<br><br>“Augh,” una voce bisbiglia da sotto la superficie. Un ornitorinco dall'aria sconvolta emerge. “Questa tana non mi viene proprio bene! Ogni volta che inizio sembra sbagliata.” Si immerge di nuovo e la sua coda larga e piatta ti lancia un potente schizzo in faccia.<br><br>“Aspetta, non disfare tutto—” urli, mentre un altro schizzo d'acqua del torrente ti colpisce. Potresti riuscire a dargli una mano e, allo stesso tempo, trovare un po' di ispirazione!", "questPlatypusNotes": "È una splendida giornata a Conquest Creek, resa solamente peggiore dal foglio di lavoro che hai in mano. Perché le avventure più belle vengono sempre rovinate dai compiti? Sei a cinque domande sugli ecosistemi fluviali quando ti ritrovi con una domanda a risposta aperta.<br><br>“Descrivi come un animale potrebbe adattarsi a vivere in un fiume? Uff, non lo so...”<br><br>Dopo aver passato 30 minuti bloccato senza sapere nemmeno da dove iniziare, senti un sacco di schizzi provenire dalla riva.<br><br>“Augh,” una voce bisbiglia da sotto la superficie. Un ornitorinco dall'aria sconvolta emerge. “Questa tana non mi viene proprio bene! Ogni volta che inizio sembra sbagliata.” Si immerge di nuovo e la sua coda larga e piatta ti lancia un potente schizzo in faccia.<br><br>“Aspetta, non disfare tutto—” urli, mentre un altro schizzo d'acqua del torrente ti colpisce. Potresti riuscire a dargli una mano e, allo stesso tempo, trovare un po' di ispirazione!",
"questOpalNotes": "Gli studiosi di Habitica hanno a lungo cercato la leggendaria Pozione di Schiusa Magica d'Opale. Una pozione così potente da infondere agli Animali Domestici e alle loro Cavalcature un colore fiammeggiante e una brillantezza senza pari rispetto a qualsiasi altra gemma o metallo prezioso. Si dice persino che la magia degli opali migliori la pianificazione, l'intuito e la creatività. Sarebbe un bel vantaggio per fare le tue attività!<br><br>A seguito di lunghe ricerche, potresti finalmente aver scoperto la risposta. Le Pozioni d'Opale richiedono pietre di opale grezze da forgiare con le rune magiche della Bilancia e di Mercurio. Questi antichi oggetti si trovano in un solo luogo... le pericolose rovine della città perduta, ai margini del Deserto Perditempo.<br><br>Arrivi alle rovine dopo interi giorni sulla tua Cavalcatura più forte, attraverso il terreno aspro e remoto. Tra le pietre sbiancate dal sole e spezzate scorgi un bagliore luminoso. La ricerca ha inizio!", "questOpalNotes": "Gli studiosi di Habitica hanno a lungo cercato la leggendaria Pozione di Schiusa Magica d'Opale. Una pozione così potente da infondere agli Animali Domestici e alle loro Cavalcature un colore fiammeggiante e una brillantezza senza pari rispetto a qualsiasi altra gemma o metallo prezioso. Si dice persino che la magia degli opali migliori la pianificazione, l'intuito e la creatività. Sarebbe un bel vantaggio per fare le tue attività!<br><br>A seguito di lunghe ricerche, potresti finalmente aver scoperto la risposta. Le Pozioni d'Opale richiedono pietre di opale grezze da forgiare con le rune magiche della Bilancia e di Mercurio. Questi antichi oggetti si trovano in un solo luogo... le pericolose rovine della città perduta, ai margini del Deserto Perditempo.<br><br>Arrivi alle rovine dopo interi giorni sulla tua Cavalcatura più forte, attraverso il terreno aspro e remoto. Tra le pietre sbiancate dal sole e spezzate scorgi un bagliore luminoso. La ricerca ha inizio!",
"questFungiText": "Il Fungo Lunatico", "questFungiText": "Il Fungo Lunatico",
@@ -54,13 +54,13 @@
"commGuideList11A": "Herinneringen van de richtlijnen", "commGuideList11A": "Herinneringen van de richtlijnen",
"commGuideList11B": "Waarschuwingen", "commGuideList11B": "Waarschuwingen",
"commGuideList11C": "Verzoeken", "commGuideList11C": "Verzoeken",
"commGuideList11D": "Verwijdering van problematische content door de beheerder.", "commGuideList11D": "Verwijdering van problematische content door de beheerder",
"commGuideList11E": "Aanpassingen van problematische content door de beheerder.", "commGuideList11E": "Aanpassingen van problematische content door de beheerder",
"commGuideHeadingRestoration": "Herstel", "commGuideHeadingRestoration": "Herstel",
"commGuidePara061": "Habitica is gewijd aan zelfverbetering, en we geloven dan ook in het geven van een tweede kans. <strong>Als je een overtreding begaat en een gevolg opgelegd krijgt, zie dat dan als een kans om je acties te evalueren en ernaar te streven een beter gemeenschapslid te zijn</strong>.", "commGuidePara061": "Habitica is gewijd aan zelfverbetering, en we geloven dan ook in het geven van een tweede kans. <strong>Als je een overtreding begaat en een gevolg opgelegd krijgt, zie dat dan als een kans om je acties te evalueren en ernaar te streven een beter gemeenschapslid te zijn</strong>.",
"commGuidePara062": "De aankondiging, het bericht, en/of de e-mail die je ontvangt met de consequenties van je acties is een goede bron van informatie. Werk mee met iedere restrictie die van kracht is en probeer te voldoen aan de eisen om de sancties op te laten heffen. Als je wenst vragen te stellen omtrent je overtreding of consequenties, je te verontschuldigen, of pleiten voor een herstelling, neem contact met ons op via mail: admin@habitica.com met je gebruikersID of @gebruikersnaam. Het is jouw verantwoordelijkheid om contact op te nemen.", "commGuidePara062": "De aankondiging, het bericht, en/of de e-mail die je ontvangt met de consequenties van je acties is een goede bron van informatie. Werk mee met iedere restrictie die van kracht is en probeer te voldoen aan de eisen om de sancties op te laten heffen. Als je wenst vragen te stellen omtrent je overtreding of consequenties, je te verontschuldigen, of pleiten voor een herstelling, neem contact met ons op via mail: admin@habitica.com met je gebruikersID of @gebruikersnaam. Het is jouw verantwoordelijkheid om contact op te nemen.",
"commGuidePara063": "Als je de gevolgen niet begrijpt, niet begrijpt wat je overtreding was of als je nog andere vragen hebt in betrekking tot de zaak, vraag dan een beheerder om hulp zodat je in de toekomst niet weer de fout in gaat. Als je het niet eens bent met een bepaalde beslissing, dan kan je contact opnemen met de beheerder om erover te discusseren via <a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a>.", "commGuidePara063": "Als je de gevolgen niet begrijpt, niet begrijpt wat je overtreding was of als je nog andere vragen hebt in betrekking tot de zaak, vraag dan een beheerder om hulp zodat je in de toekomst niet weer de fout in gaat. Als je het niet eens bent met een bepaalde beslissing, dan kan je contact opnemen met de beheerder om erover te discusseren via <a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a>.",
"commGuideHeadingMeet": "Maak kennis met de Beheerders!", "commGuideHeadingMeet": "Maak kennis met de Beheerders",
"commGuidePara007": "De Habitica Beheerders houden de app en de webpagina's lopende en kunnen ageren als gespreksmoderators. Ze hebben paarse naamlabels met kroontjes erop. Hun titel is \"Heroisch\".", "commGuidePara007": "De Habitica Beheerders houden de app en de webpagina's lopende en kunnen ageren als gespreksmoderators. Ze hebben paarse naamlabels met kroontjes erop. Hun titel is \"Heroisch\".",
"commGuidePara009": "De huidige werknemers zijn (van links naar rechts):", "commGuidePara009": "De huidige werknemers zijn (van links naar rechts):",
"commGuideAKA": "<%= habitName %> alias <%= realName %>", "commGuideAKA": "<%= habitName %> alias <%= realName %>",
+2 -2
View File
@@ -110,7 +110,7 @@
"missingPassword": "Ontbrekend wachtwoord.", "missingPassword": "Ontbrekend wachtwoord.",
"missingNewPassword": "Ontbrekend nieuw wachtwoord.", "missingNewPassword": "Ontbrekend nieuw wachtwoord.",
"invalidEmailDomain": "Je kunt je niet registreren met e-mailadressen met de volgende domeinnamen: <%= domains %>", "invalidEmailDomain": "Je kunt je niet registreren met e-mailadressen met de volgende domeinnamen: <%= domains %>",
"wrongPassword": "Wachtwoord is onjuist! Als je het niet meer weet, klik dan op \"Wachtwoord vergeten\".", "wrongPassword": "Wachtwoord is onjuist! Als je het niet meer weet, klik dan op \"Wachtwoord vergeten.\"",
"incorrectDeletePhrase": "Gelieve <%= magicWord %> in hoofdletters te typen om je account te verwijderen.", "incorrectDeletePhrase": "Gelieve <%= magicWord %> in hoofdletters te typen om je account te verwijderen.",
"notAnEmail": "Ongeldig e-mailadres.", "notAnEmail": "Ongeldig e-mailadres.",
"emailTaken": "E-mailadres is al in gebruik door een account.", "emailTaken": "E-mailadres is al in gebruik door een account.",
@@ -122,7 +122,7 @@
"passwordConfirmationMatch": "Wachtwoordconfirmatie komt niet overeen met wachtwoord.", "passwordConfirmationMatch": "Wachtwoordconfirmatie komt niet overeen met wachtwoord.",
"passwordResetPage": "Reset je wachtwoord", "passwordResetPage": "Reset je wachtwoord",
"passwordReset": "Als we je e-mailadres of gebruikersnaam in ons bestand hebben staan, dan zijn er nu instructies verstuurd voor het opnieuw instellen van je wachtwoord.", "passwordReset": "Als we je e-mailadres of gebruikersnaam in ons bestand hebben staan, dan zijn er nu instructies verstuurd voor het opnieuw instellen van je wachtwoord.",
"invalidLoginCredentialsLong": "Je e-mailadres, gebruikersnaam of wachtwoord is onjuist. Probeer het opnieuw of klik op \"Wachtwoord vergeten\".", "invalidLoginCredentialsLong": "Je e-mailadres, gebruikersnaam of wachtwoord is onjuist. Probeer het opnieuw of klik op \"Wachtwoord vergeten.\"",
"invalidCredentials": "Er is geen account dat deze aanmeldingsgegevens bevat.", "invalidCredentials": "Er is geen account dat deze aanmeldingsgegevens bevat.",
"accountSuspended": "Jouw account, @\"<%= userId %>\" is geblokkeerd. Voor meer informatie of een verzoek om de blokkering op the heffen, stuur een email naar admin@habitica.com met je gebruikersnaam of gebruikers-ID.", "accountSuspended": "Jouw account, @\"<%= userId %>\" is geblokkeerd. Voor meer informatie of een verzoek om de blokkering op the heffen, stuur een email naar admin@habitica.com met je gebruikersnaam of gebruikers-ID.",
"accountSuspendedTitle": "Account is geschorst", "accountSuspendedTitle": "Account is geschorst",
+7 -1
View File
@@ -2676,5 +2676,11 @@
"weaponSpecialWinter2025HealerNotes": "Wat je nu nodig hebt zijn meer lichtjes met een lichtgevende ster er bovenop! Je zal niet te stoppen zijn! Verhoogt Intelligentie met <%= int %>. Beperkte Oplage Winter 2024-2025 Uitrusting.", "weaponSpecialWinter2025HealerNotes": "Wat je nu nodig hebt zijn meer lichtjes met een lichtgevende ster er bovenop! Je zal niet te stoppen zijn! Verhoogt Intelligentie met <%= int %>. Beperkte Oplage Winter 2024-2025 Uitrusting.",
"headMystery202111Text": "Chroovision Hoed", "headMystery202111Text": "Chroovision Hoed",
"headArmoireRegalCrownText": "Koninklijke Kroon", "headArmoireRegalCrownText": "Koninklijke Kroon",
"shieldArmoireBucketText": "Emmer" "shieldArmoireBucketText": "Emmer",
"headArmoireMedievalLaundryCapText": "Wasserij Pet",
"headArmoireRubberDuckyText": "Rubber Eendje",
"headArmoireMedievalLaundryHatText": "Wasserij Hoed",
"shieldArmoireMedievalLaundryText": "Vuile Wasgoed",
"shieldArmoireBasketballText": "Basketbal",
"shieldArmoireDustpanText": "Stofblik"
} }
+4 -2
View File
@@ -154,7 +154,7 @@
"assignedToUser": "Toegewezen aan <strong><%= userName %></strong>", "assignedToUser": "Toegewezen aan <strong><%= userName %></strong>",
"assignedToMembers": "<%= userCount %> leden", "assignedToMembers": "<%= userCount %> leden",
"assignedToYouAndMembers": "Jou en <strong><%= userCount %> andere leden</strong>", "assignedToYouAndMembers": "Jou en <strong><%= userCount %> andere leden</strong>",
"youAreAssigned": "Aan jou toegewezen", "youAreAssigned": "Aan <strong>jou</strong> toegewezen",
"taskIsUnassigned": "Deze taak is niet toegewezen", "taskIsUnassigned": "Deze taak is niet toegewezen",
"confirmUnClaim": "Weet je zeker dat je deze taak wilt opgeven?", "confirmUnClaim": "Weet je zeker dat je deze taak wilt opgeven?",
"confirmNeedsWork": "Weet je zeker dat je deze taak op 'werk nodig' wil zetten?", "confirmNeedsWork": "Weet je zeker dat je deze taak op 'werk nodig' wil zetten?",
@@ -386,5 +386,7 @@
"youEmphasized": "<strong>U</strong>", "youEmphasized": "<strong>U</strong>",
"languageLabel": "Taal:", "languageLabel": "Taal:",
"lookingForPartyTitle": "Leden Zoeken", "lookingForPartyTitle": "Leden Zoeken",
"currentlyLookingForParty": "Jij zoekt een Gezelschap!" "currentlyLookingForParty": "Jij zoekt een Gezelschap!",
"nameStar": "Naam",
"classLabel": "Klasse:"
} }
+6 -6
View File
@@ -236,13 +236,13 @@
"summer2025ScallopWarriorSet": "Sint-Jacobsschelp Krijger Set", "summer2025ScallopWarriorSet": "Sint-Jacobsschelp Krijger Set",
"summer2025SquidRogueSet": "Inktvis Schurken Set", "summer2025SquidRogueSet": "Inktvis Schurken Set",
"summer2025SeaAngelHealerSet": "Zee-egel Genezer Set", "summer2025SeaAngelHealerSet": "Zee-egel Genezer Set",
"winter2025MooseWarriorSet": "Elandkrijger Set", "winter2025MooseWarriorSet": "Elandkrijger Set (Krijger)",
"winter2025AuroraMageSet": "Aurora Magiër Set", "winter2025AuroraMageSet": "Aurora Verzameling (Magiër)",
"winter2025StringLightsHealerSet": "Lichtsnoer Genezer Set", "winter2025StringLightsHealerSet": "Lichtsnoer Set (Genezer)",
"winter2025SnowRogueSet": "Sneeuwschurken Set", "winter2025SnowRogueSet": "Sneeuw Verzameling (Schurk)",
"spring2025SunshineWarriorSet": "Zonnenschijnkrijgers Set", "spring2025SunshineWarriorSet": "Zonnenschijnkrijgers Set",
"spring2025CrystalPointRogueSet": "Kristalpunt Schurken Set", "spring2025CrystalPointRogueSet": "Kristalpunt Set (Schurk)",
"spring2025PlumeriaHealerSet": "Plumeria Genezer Set", "spring2025PlumeriaHealerSet": "Plumeria Verzameling (Genezer)",
"spring2025MantisMageSet": "Bidsprinkhaan Magiër Set", "spring2025MantisMageSet": "Bidsprinkhaan Magiër Set",
"fall2024FieryImpWarriorSet": "Vurige Imp Set (Krijger)", "fall2024FieryImpWarriorSet": "Vurige Imp Set (Krijger)",
"fall2024UnderworldSorcerorMageSet": "Onderwereld Heksenmeester Set (Magiër)", "fall2024UnderworldSorcerorMageSet": "Onderwereld Heksenmeester Set (Magiër)",
+2 -2
View File
@@ -77,7 +77,7 @@
"newBaileyUpdate": "Nieuwe update van Bailey!", "newBaileyUpdate": "Nieuwe update van Bailey!",
"tellMeLater": "Een andere keer lezen", "tellMeLater": "Een andere keer lezen",
"dismissAlert": "Boodschap verbergen", "dismissAlert": "Boodschap verbergen",
"donateText3": "Habitica is een open-sourceproject dat afhankelijk is van onze gebruikers voor ondersteuning. Het geld dat jij uitgeeft aan edelstenen helpt ons om de servers draaiende te houden, een kleine stafgroep medewerkers te onderhouden, nieuwe functies te ontwikkelen en onze vrijwilligers te stimuleren.", "donateText3": "Habitica is een open-sourceproject dat afhankelijk is van onze gebruikers voor ondersteuning. Het geld dat jij uitgeeft aan edelstenen helpt ons om de servers draaiende te houden, een kleine stafgroep medewerkers te onderhouden, nieuwe functies te ontwikkelen en onze vrijwilligers te stimuleren",
"card": "Creditcard", "card": "Creditcard",
"paymentMethods": "Koop met", "paymentMethods": "Koop met",
"paymentSuccessful": "Je betaling van succesvol!", "paymentSuccessful": "Je betaling van succesvol!",
@@ -111,7 +111,7 @@
"welcome3": "Boek vooruitgang in je leven en in het spel!", "welcome3": "Boek vooruitgang in je leven en in het spel!",
"welcome3notes": "Terwijl je je leven verbetert, zal je avatar een hoger niveau bereiken en huisdieren, queesten, uitrusting en nog meer vrijspelen!", "welcome3notes": "Terwijl je je leven verbetert, zal je avatar een hoger niveau bereiken en huisdieren, queesten, uitrusting en nog meer vrijspelen!",
"limitedOffer": "Beschikbaar tot <%= date %>", "limitedOffer": "Beschikbaar tot <%= date %>",
"paymentSubBillingWithMethod": "Je abonnement zal afgeschreven worden: <strong>$<%= amount %></strong> elke <strong><%= months %> maanden</strong> via <strong><%= paymentMethod %></strong>.", "paymentSubBillingWithMethod": "Je abonnement zal afgeschreven worden: <strong>$<%= amount %></strong> elke <strong><%= months %> maanden</strong> via <strong><%= paymentMethod %></strong>",
"paymentCanceledDisputes": "We hebben een annuleringsbevestiging gestuurd naar je e-mailadres. Als je deze mail niet ziet, neem dan alsjeblieft contact met ons op om geschillen over toekomstige rekeningen te voorkomen.", "paymentCanceledDisputes": "We hebben een annuleringsbevestiging gestuurd naar je e-mailadres. Als je deze mail niet ziet, neem dan alsjeblieft contact met ons op om geschillen over toekomstige rekeningen te voorkomen.",
"paymentAutoRenew": "Dit abonnement zal automatisch vernieuwd worden totdat het wordt geannuleerd. Als het nodig is je abonnement op te zeggen, kun je dat doen in je instellingen.", "paymentAutoRenew": "Dit abonnement zal automatisch vernieuwd worden totdat het wordt geannuleerd. Als het nodig is je abonnement op te zeggen, kun je dat doen in je instellingen.",
"cannotUnpinItem": "Dit voorwerp kan niet losgekoppeld worden.", "cannotUnpinItem": "Dit voorwerp kan niet losgekoppeld worden.",
+1 -1
View File
@@ -105,7 +105,7 @@
"notEnoughMounts": "Je hebt niet genoeg rijdieren verzameld", "notEnoughMounts": "Je hebt niet genoeg rijdieren verzameld",
"notEnoughPetsMounts": "Je hebt niet genoeg huis- en rijdieren verzameld", "notEnoughPetsMounts": "Je hebt niet genoeg huis- en rijdieren verzameld",
"filterByWacky": "Maf", "filterByWacky": "Maf",
"gryphatrice": "Schrijfmachine", "gryphatrice": "Grifalisk",
"wackyPets": "Maffe Huisdieren", "wackyPets": "Maffe Huisdieren",
"invalidAmount": "Ongeldige hoeveelheid voedsel, moet een positief geheel getal zijn", "invalidAmount": "Ongeldige hoeveelheid voedsel, moet een positief geheel getal zijn",
"tooMuchFood": "Je probeert je huisdier teveel te voederen, handeling geannuleerd", "tooMuchFood": "Je probeert je huisdier teveel te voederen, handeling geannuleerd",
+2 -2
View File
@@ -60,7 +60,7 @@
"questSpiderUnlockText": "Ontgrendelt het kopen van Spinneneieren op de Markt", "questSpiderUnlockText": "Ontgrendelt het kopen van Spinneneieren op de Markt",
"questGroupVice": "Ondeugd de schaduwdraak", "questGroupVice": "Ondeugd de schaduwdraak",
"questVice1Text": "Ondeugd, deel 1: Bevrijd jezelf van de Invloed van de Draak", "questVice1Text": "Ondeugd, deel 1: Bevrijd jezelf van de Invloed van de Draak",
"questVice1Notes": "Ze zeggen dat er een vreselijk kwaad schuilt in de grotten van Berg Habitica. Een monster wiens aanwezigheid de wil van de sterke helden van het land verdraait en hen naar slechte gewoonten en luiheid leidt! Het beest is een grootse draak met immense kracht, bestaande uit de schaduw zelf: Ondeugd, het verraderlijke Schaduw Serpent. Dappere Habiteers, sta op en versla dit vuile beest voor eens en altijd, maar alleen als je gelooft dat je opkan tegen zijn immense kracht. <br><br>Hoe kan je verwachten te vechten tegen zo'n beest wanneer het jou al in zijn macht heeft? Val niet ten slachtoffer aan luiheid en ondeugd! Werk hard om te vechten tegen de duistere invloed van de draak en verdrijf zijn greep op je!</p>", "questVice1Notes": "Ze zeggen dat er een vreselijk kwaad schuilt in de grotten van Berg Habitica. Een monster wiens aanwezigheid de wil van de sterke helden van het land verdraait en hen naar slechte gewoonten en luiheid leidt! Het beest is een grootse draak met immense kracht, bestaande uit de schaduw zelf: Ondeugd, het verraderlijke Schaduw Serpent. Dappere Habiteers, sta op en versla dit vuile beest voor eens en altijd, maar alleen als je gelooft dat je opkan tegen zijn immense kracht. <br><br>Hoe kan je verwachten te vechten tegen zo'n beest wanneer het jou al in zijn macht heeft? Val niet ten slachtoffer aan luiheid en ondeugd! Werk hard om te vechten tegen de duistere invloed van de draak en verdrijf zijn greep op je!",
"questVice1Boss": "De Schaduw van Ondeugd", "questVice1Boss": "De Schaduw van Ondeugd",
"questVice1Completion": "Met Vice`s invloed over je betoverd, voel je opeens een golf aan kracht waarvan je niet wist dat je hem had wederkeren naar je. Gefeliciteerd! Maar een nog angstaanjagerende vijand wacht op je...", "questVice1Completion": "Met Vice`s invloed over je betoverd, voel je opeens een golf aan kracht waarvan je niet wist dat je hem had wederkeren naar je. Gefeliciteerd! Maar een nog angstaanjagerende vijand wacht op je...",
"questVice1DropVice2Quest": "Ondeugd deel 2 (perkamentrol)", "questVice1DropVice2Quest": "Ondeugd deel 2 (perkamentrol)",
@@ -177,7 +177,7 @@
"questStressbeastBossRageBailey": "'Het Verschrikkelijke Stressbeest gebruikt STRESS-STOOT!'\n\nDe golf van stress geneest het Verschrikkelijke Stressbeest!\n\nAaaah! Onze incomplete Dagelijke Taken zorgen ervoor dat het Verschrikkelijke Stressbeest kwader dan ooit wordt en wat van zijn gezondheid herwint! Bailey de stadsomroeper liep te roepen om de burgers in veiligheid te brengen, maar nu heeft het Stressbeest haar in zijn andere hand! Kijk hoe ze dapper verslag blijft geven terwijl het Stressbeest haar venijnig rondzwaait... Bewijs dat je haar dapperheid waard bent door zo productief te zijn als je maar kan, zodat we onze NPC's kunnen redden!", "questStressbeastBossRageBailey": "'Het Verschrikkelijke Stressbeest gebruikt STRESS-STOOT!'\n\nDe golf van stress geneest het Verschrikkelijke Stressbeest!\n\nAaaah! Onze incomplete Dagelijke Taken zorgen ervoor dat het Verschrikkelijke Stressbeest kwader dan ooit wordt en wat van zijn gezondheid herwint! Bailey de stadsomroeper liep te roepen om de burgers in veiligheid te brengen, maar nu heeft het Stressbeest haar in zijn andere hand! Kijk hoe ze dapper verslag blijft geven terwijl het Stressbeest haar venijnig rondzwaait... Bewijs dat je haar dapperheid waard bent door zo productief te zijn als je maar kan, zodat we onze NPC's kunnen redden!",
"questStressbeastBossRageGuide": "'Het Verschrikkelijke Stressbeest gebruikt STRESS-STOOT!'\n\nDe golf van stress geneest het Verschrikkelijke Stressbeest!\n\nKijk uit! Justin de gids probeert het Stressbeest af te leiden door om zijn enkels heen te rennen, terwijl hij productiviteitstips schreeuwt. Het Verschrikkelijke Stressbeest stampt boos rond, maar het lijkt erop dat we hem moe aan het maken zijn. Ik betwijfel of hij genoeg energie heeft om nog een stoot te geven. Geef het niet op... we hebben hem bijna afgemaakt!", "questStressbeastBossRageGuide": "'Het Verschrikkelijke Stressbeest gebruikt STRESS-STOOT!'\n\nDe golf van stress geneest het Verschrikkelijke Stressbeest!\n\nKijk uit! Justin de gids probeert het Stressbeest af te leiden door om zijn enkels heen te rennen, terwijl hij productiviteitstips schreeuwt. Het Verschrikkelijke Stressbeest stampt boos rond, maar het lijkt erop dat we hem moe aan het maken zijn. Ik betwijfel of hij genoeg energie heeft om nog een stoot te geven. Geef het niet op... we hebben hem bijna afgemaakt!",
"questStressbeastDesperation": "'Het Verschrikkelijke Stressbeest heeft nog maar 500.000 gezondheidspunten! Het Verschrikkelijke Stressbeest gebruikt zijn Wanhopige Verdediging!'\n\nWe zijn er bijna, Habiticanen! Door trouw onze Dagelijkse Taken te doen hebben we de gezondheid van het Stressbeest verminderd tot maar 500.000! Het beest brult en mept wanhopig in de rondte, en zijn woede groeit sneller dan ooit. Bailey en Matt gillen van angst als het beest ze met een angstaanjagende snelheid rondzwaait! Hierdoor ontstaat er een verblindende sneeuwstorm waardoor het moeilijker wordt om raak te slaan.\n\nWe moeten nog even onze krachten verdubbelen, maar geef niet op - dit is een teken dat het Stressbeest weet dat het bijna verslagen is. Nog even volhouden!", "questStressbeastDesperation": "'Het Verschrikkelijke Stressbeest heeft nog maar 500.000 gezondheidspunten! Het Verschrikkelijke Stressbeest gebruikt zijn Wanhopige Verdediging!'\n\nWe zijn er bijna, Habiticanen! Door trouw onze Dagelijkse Taken te doen hebben we de gezondheid van het Stressbeest verminderd tot maar 500.000! Het beest brult en mept wanhopig in de rondte, en zijn woede groeit sneller dan ooit. Bailey en Matt gillen van angst als het beest ze met een angstaanjagende snelheid rondzwaait! Hierdoor ontstaat er een verblindende sneeuwstorm waardoor het moeilijker wordt om raak te slaan.\n\nWe moeten nog even onze krachten verdubbelen, maar geef niet op - dit is een teken dat het Stressbeest weet dat het bijna verslagen is. Nog even volhouden!",
"questStressbeastCompletion": "<strong>Het Verschrikkelijke Stressbeest is verslagen!</strong><br><br>Het is ons gelukt! Met een laatste brul valt het Verschrikkelijke Stressbeest uit elkaar in een wolk sneeuw. De vlokken glinsteren in de lucht en Habiticanen omarmen hun huisdieren en rijdieren. Onze dieren en NPC's zijn weer veilig!<br><br><strong>Stoïkalm is gered!</strong><br><br> SabreCat praat zachtjes tegen een kleine sabeltandtijger. \"Ga alsjeblieft op zoek naar de bewoners van de Stoïkalmse Steppen en vraag ze om hier te komen,\" zegt hij. Enkele uren later komt de sabeltandtijger terug, langzaam gevolgd door een kudde mammoetrijders. Je herkent de voorste mammoetrijder als Vrouwe Gletsjer, de leider van Stoïkalm.<br><br> \"Machtige Habitcanen,\" zegt ze, \"mijn inwoners en ik zijn je onze diepste dankbaarheid schuldig. In een poging om onze Steppen tegen onrust te beschermen zijn we stiekem begonnen onze stress naar de ijzige bergen te verbannen. We hadden geen idee dat het in de loop van generaties op zou bouwen tot zo'n enorm Stressbeest! Toen hij losbrak, sloot hij ons in in de bergen waar hij vandaan kwam en ging hij tekeer tegen onze geliefde dieren.\" Verdrietig staart ze naar de vallende sneeuw. \"We hebben iedereen in gevaar gebracht met onze domheid. Je kunt erop vertrouwen dat we in de toekomst met onze problemen naar jullie toe zullen komen voordat onze problemen zelf naar jullie toe komen!\"<br><br> Ze draait zich om naar @Baconsaur die de babymammoeten aan het knuffelen is. \"We hebben een voedseloffer meegenomen voor jullie dieren om onze verontschuldigingen aan te bieden dat we ze hebben laten schrikken, en als teken van vertrouwen laten we een paar van onze huisdieren en rijdieren bij jullie achter. We weten zeker dat jullie goed voor ze zullen zorgen.\"", "questStressbeastCompletion": "<strong>Het Verschrikkelijke Stressbeest is verslagen!</strong><br><br>Het is ons gelukt! Met een laatste brul valt het Verschrikkelijke Stressbeest uit elkaar in een wolk sneeuw. De vlokken glinsteren in de lucht en Habiticanen omarmen hun huisdieren en rijdieren. Onze dieren en NPC's zijn weer veilig!<br><br><strong>Stoïkalm is gered!</strong><br><br> SabreCat praat zachtjes tegen een kleine sabeltandtijger. \"Ga alsjeblieft op zoek naar de bewoners van de Stoïkalmse Steppen en vraag ze om hier te komen,\" zegt hij. Enkele uren later komt de sabeltandtijger terug, langzaam gevolgd door een kudde mammoetrijders. Je herkent de voorste mammoetrijder als Vrouwe Gletsjer, de leider van Stoïkalm.<br><br> \"Machtige Habitcanen,\" zegt ze, \"mijn inwoners en ik zijn je onze diepste dankbaarheid schuldig. In een poging om onze Steppen tegen onrust te beschermen zijn we stiekem begonnen onze stress naar de ijzige bergen te verbannen. We hadden geen idee dat het in de loop van generaties op zou bouwen tot zo'n enorm Stressbeest! Toen hij losbrak, sloot hij ons in de bergen waar hij vandaan kwam en ging hij tekeer tegen onze geliefde dieren.\" Verdrietig staart ze naar de vallende sneeuw. \"We hebben iedereen in gevaar gebracht met onze domheid. Je kunt erop vertrouwen dat we in de toekomst met onze problemen naar jullie toe zullen komen voordat onze problemen zelf naar jullie toe komen!\"<br><br> Ze draait zich om naar @Baconsaur die de babymammoeten aan het knuffelen is. \"We hebben een voedseloffer meegenomen voor jullie dieren om onze verontschuldigingen aan te bieden dat we ze hebben laten schrikken, en als teken van vertrouwen laten we een paar van onze huisdieren en rijdieren bij jullie achter. We weten zeker dat jullie goed voor ze zullen zorgen.\"",
"questStressbeastCompletionChat": "`Het Verschrikkelijke Stressbeest is verslagen!`\n\nHet is ons gelukt! Met een laatste brul valt het Verschrikkelijke Stressbeest uit elkaar in een wolk sneeuw. De vlokken glinsteren in de lucht en Habiticanen omarmen hun huisdieren en rijdieren. Onze dieren en NPC's zijn weer veilig!\n\n`Stoïkalm is gered!`\n\nSabreCat praat zachtjes tegen een kleine sabeltandtijger. \"Ga alsjeblieft op zoek naar de bewoners van de Stoïkalmse Steppen en vraag ze om hier te komen,\" zegt hij. Enkele uren later komt de sabeltandtijger terug, langzaam gevolgd door een kudde mammoetrijders. Je herkent de voorste mammoetrijder als Vrouwe Gletsjer, de leider van Stoïkalm.\n\n\"Machtige Habiticanen,\" zegt ze, \"mijn inwoners en ik zijn je onze diepste dankbaarheid schuldig. In een poging om onze Steppen tegen onrust te beschermen zijn we stiekem begonnen onze stress naar de ijzige bergen te verbannen. We hadden geen idee dat het in de loop van generaties op zou bouwen tot zo'n enorm Stressbeest! Toen hij losbrak, sloot hij ons in in de bergen waar hij vandaan kwam en ging hij tekeer tegen onze geliefde dieren.\" Verdrietig staart ze naar de vallende sneeuw. \"We hebben iedereen in gevaar gebracht met onze domheid. Je kunt erop vertrouwen dat we in de toekomst met onze problemen naar jullie toe zullen komen voordat onze problemen zelf naar jullie toe komen!\"\n\nZe draait zich om naar @Baconsaur die de babymammoeten aan het knuffelen is. \"We hebben een voedseloffer meegenomen voor jullie dieren om onze verontschuldigingen aan te bieden dat we ze hebben laten schrikken, en als teken van vertrouwen laten we een paar van onze huisdieren en rijdieren bij jullie achter. We weten zeker dat jullie goed voor ze zullen zorgen.\"", "questStressbeastCompletionChat": "`Het Verschrikkelijke Stressbeest is verslagen!`\n\nHet is ons gelukt! Met een laatste brul valt het Verschrikkelijke Stressbeest uit elkaar in een wolk sneeuw. De vlokken glinsteren in de lucht en Habiticanen omarmen hun huisdieren en rijdieren. Onze dieren en NPC's zijn weer veilig!\n\n`Stoïkalm is gered!`\n\nSabreCat praat zachtjes tegen een kleine sabeltandtijger. \"Ga alsjeblieft op zoek naar de bewoners van de Stoïkalmse Steppen en vraag ze om hier te komen,\" zegt hij. Enkele uren later komt de sabeltandtijger terug, langzaam gevolgd door een kudde mammoetrijders. Je herkent de voorste mammoetrijder als Vrouwe Gletsjer, de leider van Stoïkalm.\n\n\"Machtige Habiticanen,\" zegt ze, \"mijn inwoners en ik zijn je onze diepste dankbaarheid schuldig. In een poging om onze Steppen tegen onrust te beschermen zijn we stiekem begonnen onze stress naar de ijzige bergen te verbannen. We hadden geen idee dat het in de loop van generaties op zou bouwen tot zo'n enorm Stressbeest! Toen hij losbrak, sloot hij ons in in de bergen waar hij vandaan kwam en ging hij tekeer tegen onze geliefde dieren.\" Verdrietig staart ze naar de vallende sneeuw. \"We hebben iedereen in gevaar gebracht met onze domheid. Je kunt erop vertrouwen dat we in de toekomst met onze problemen naar jullie toe zullen komen voordat onze problemen zelf naar jullie toe komen!\"\n\nZe draait zich om naar @Baconsaur die de babymammoeten aan het knuffelen is. \"We hebben een voedseloffer meegenomen voor jullie dieren om onze verontschuldigingen aan te bieden dat we ze hebben laten schrikken, en als teken van vertrouwen laten we een paar van onze huisdieren en rijdieren bij jullie achter. We weten zeker dat jullie goed voor ze zullen zorgen.\"",
"questTRexText": "Koning van de Dinosauriërs", "questTRexText": "Koning van de Dinosauriërs",
"questTRexNotes": "Nu dat er overal oeroude wezens uit de Stoïkalmse Steppen ronddwalen in Habitica, heeft @Urse besloten een volwassen tyrannosaurus te adopteren. Wat zou er mis kunnen gaan?<br><br>Alles.", "questTRexNotes": "Nu dat er overal oeroude wezens uit de Stoïkalmse Steppen ronddwalen in Habitica, heeft @Urse besloten een volwassen tyrannosaurus te adopteren. Wat zou er mis kunnen gaan?<br><br>Alles.",
+5 -4
View File
@@ -114,7 +114,7 @@
"couponUsed": "Couponcode is al in gebruik.", "couponUsed": "Couponcode is al in gebruik.",
"couponCodeRequired": "De couponcode is vereist.", "couponCodeRequired": "De couponcode is vereist.",
"choosePaymentMethod": "Kies je betaalmethode", "choosePaymentMethod": "Kies je betaalmethode",
"support": "ONDERSTEUNING", "support": "Ondersteuning",
"gemBenefitLeadin": "Wat kun je met edelstenen kopen?", "gemBenefitLeadin": "Wat kun je met edelstenen kopen?",
"gemBenefit1": "Unieke en modieuze kostuums voor je avatar.", "gemBenefit1": "Unieke en modieuze kostuums voor je avatar.",
"gemBenefit2": "Achtergronden om je avatar in de wereld van Habitica te onderdompelen!", "gemBenefit2": "Achtergronden om je avatar in de wereld van Habitica te onderdompelen!",
@@ -124,7 +124,7 @@
"subscriptionBenefit3": "Ontdek nog meer voorwerpen in Habitica met een 2x dagelijkse vondstenlimiet.", "subscriptionBenefit3": "Ontdek nog meer voorwerpen in Habitica met een 2x dagelijkse vondstenlimiet.",
"subscriptionBenefit4": "Uniek cosmetisch voorwerp waarmee je elke maand je avatar kunt versieren.", "subscriptionBenefit4": "Uniek cosmetisch voorwerp waarmee je elke maand je avatar kunt versieren.",
"subscriptionBenefit5": "Ontvang het Royale Paarse Jackalope-huisdier wanneer u een nieuwe abonnee wordt.", "subscriptionBenefit5": "Ontvang het Royale Paarse Jackalope-huisdier wanneer u een nieuwe abonnee wordt.",
"subscriptionBenefit6": "Verdien Mystieke zandlopers om voorwerpen te kopen in de Tijdreizigerswinkel!", "subscriptionBenefit6": "Verdien Mystieke Zandlopers om voorwerpen te kopen in de Tijdreizigerswinkel!",
"purchaseAll": "Koop set aan", "purchaseAll": "Koop set aan",
"gemsRemaining": "Edelstenen resterend", "gemsRemaining": "Edelstenen resterend",
"notEnoughGemsToBuy": "Je kunt dat aantal edelstenen niet kopen", "notEnoughGemsToBuy": "Je kunt dat aantal edelstenen niet kopen",
@@ -180,7 +180,7 @@
"mysterySet202008": "Uilenorakel Set", "mysterySet202008": "Uilenorakel Set",
"mysterySet202007": "Uitmuntende Orca Set", "mysterySet202007": "Uitmuntende Orca Set",
"cancelSubInfoApple": "Om je abonnement op te zeggen of de verloopdatum van je abonnement in te zien (in het geval dat je reeds hebt opgezegd), ga naar <a href=\"https://support.apple.com/en-us/HT202039\">Apple's officiële instructies</a>. Op dit scherm kun je niet zien of je abonnement reeds is opgezegd of niet.", "cancelSubInfoApple": "Om je abonnement op te zeggen of de verloopdatum van je abonnement in te zien (in het geval dat je reeds hebt opgezegd), ga naar <a href=\"https://support.apple.com/en-us/HT202039\">Apple's officiële instructies</a>. Op dit scherm kun je niet zien of je abonnement reeds is opgezegd of niet.",
"cancelSubInfoGoogle": "Om je abonnement op te zeggen, of om de opzegdatum te bekijken als je al hebt opgezegd, ga je naar de <a href='https://play.google.com/store/account/subscriptions' target='_blank'>Google Play Store</a>. Eventuele resterende maanden aan abonnementscredits worden na opzegging aan je einddatum toegevoegd.", "cancelSubInfoGoogle": "Om je abonnement op te zeggen, of om de opzegdatum te bekijken als je al hebt opgezegd, ga je naar de <a href='https://play.google.com/store/account/subscriptions'>Google Play Store</a>. Eventuele resterende maanden aan abonnementscredits worden na opzegging aan je einddatum toegevoegd.",
"mysterySet202102": "Charmerende Kampioenenset", "mysterySet202102": "Charmerende Kampioenenset",
"mysterySet202103": "Bloesem Kijk Set", "mysterySet202103": "Bloesem Kijk Set",
"mysterySet202104": "Distel bewaarder set", "mysterySet202104": "Distel bewaarder set",
@@ -222,5 +222,6 @@
"mysterySet202308": "Paarse Protagonisten Set", "mysterySet202308": "Paarse Protagonisten Set",
"mysterySet202311": "Alwetende Betoveraar Set", "mysterySet202311": "Alwetende Betoveraar Set",
"mysterySet202309": "Kolossale Komeet Motten Set", "mysterySet202309": "Kolossale Komeet Motten Set",
"mysterySet202310": "Spooklicht Schim Set" "mysterySet202310": "Spooklicht Schim Set",
"subscribe": "Abonneren"
} }
+18 -9
View File
@@ -1,14 +1,14 @@
{ {
"communityGuidelinesWarning": "Tenha em mente que o seu nome de exibição, foto de perfil e blurb devem obedecer às <a href='https://habitica.com/static/community-guidelines' target='_blank'>Diretrizes de Comunidade</a> (por exemplo, não usar profanidades, tópicos de adultos, insultos, etc). Se tiver alguma pergunta acerca de se algo é apropriado ou não, sinta-se à vontade de envia um correio eletrónico para <%= hrefBlankCommunityManagerEmail %>!", "communityGuidelinesWarning": "Tenha em mente que o seu nome de exibição, foto de perfil e blurb devem obedecer às <a href='https://habitica.com/static/community-guidelines' target='_blank'>Diretrizes de Comunidade</a> (por exemplo, não usar profanidades, tópicos de adultos, insultos, etc). Se tiver alguma pergunta acerca de se algo é apropriado ou não, sinta-se à vontade de envia um correio eletrónico para <%= hrefBlankCommunityManagerEmail %>!",
"profile": "Perfil", "profile": "Perfil",
"avatar": "Personalizar Avatar", "avatar": "Personalizar avatar",
"editAvatar": "Costumizar Avatar", "editAvatar": "Costumizar Avatar",
"noDescription": "Este Habiticano não acrescentou uma descrição.", "noDescription": "Este Habiticano não acrescentou uma descrição.",
"noPhoto": "Este Habiticano não adicionout uma foto.", "noPhoto": "Este Habitican não adicionou nenhuma foto.",
"other": "Outros", "other": "Outros",
"fullName": "Nome Completo", "fullName": "Nome Completo",
"displayName": "Nome a Exibir", "displayName": "Nome a Exibir",
"changeDisplayName": "Mudar Nome de Utilizador", "changeDisplayName": "Alterar nome de exibição",
"newDisplayName": "Novo Nome de Utilizador", "newDisplayName": "Novo Nome de Utilizador",
"displayBlurbPlaceholder": "Por favor, apresente-se", "displayBlurbPlaceholder": "Por favor, apresente-se",
"photoUrl": "URL da Foto", "photoUrl": "URL da Foto",
@@ -114,11 +114,11 @@
"unallocated": "Pontos de Características não alocados", "unallocated": "Pontos de Características não alocados",
"autoAllocation": "Distribuição Automática", "autoAllocation": "Distribuição Automática",
"autoAllocationPop": "Atribui Pontos a Características de acordo com as tuas preferências, quando passas de nível.", "autoAllocationPop": "Atribui Pontos a Características de acordo com as tuas preferências, quando passas de nível.",
"evenAllocation": "Distribui Pontos de Características uniformemente", "evenAllocation": "Distribua uniformemente",
"evenAllocationPop": "Atribui o mesmo número de Pontos a cada Característica.", "evenAllocationPop": "Atribui o mesmo número de Pontos a cada Característica.",
"classAllocation": "Distribui Pontos de acordo com a Classe", "classAllocation": "Distribuir com base na classe",
"classAllocationPop": "Atribui mais Pontos às características importantes para a tua Classe.", "classAllocationPop": "Atribui mais pontos aos atributos importantes para sua turma",
"taskAllocation": "Distribui Pontos com base na actividade em tarefas", "taskAllocation": "Distribuir com base na atividade da tarefa",
"taskAllocationPop": "Distribui Pontos com base nas categorias de Força, Inteligência, Constituição e Percepção associadas às tarefas completadas.", "taskAllocationPop": "Distribui Pontos com base nas categorias de Força, Inteligência, Constituição e Percepção associadas às tarefas completadas.",
"distributePoints": "Distribuir Pontos não Distribuídos", "distributePoints": "Distribuir Pontos não Distribuídos",
"distributePointsPop": "Atribui todos os Pontos de Características não alocados de acordo com o esquema de alocação seleccionado.", "distributePointsPop": "Atribui todos os Pontos de Características não alocados de acordo com o esquema de alocação seleccionado.",
@@ -129,7 +129,7 @@
"healerText": "Curandeiros são impenetráveis contra o mal, e extendem essa proteção aos outros. Tarefas Diárias perdidas e maus Hábitos não incomodam muito, e eles possuem maneiras de recuperar Vida do fracasso. Jogue de Curandeiro se gostar de ajudar os outros em sua Equipe, ou se a ideia de enganar a Morte através de trabalho duro o inspira!", "healerText": "Curandeiros são impenetráveis contra o mal, e extendem essa proteção aos outros. Tarefas Diárias perdidas e maus Hábitos não incomodam muito, e eles possuem maneiras de recuperar Vida do fracasso. Jogue de Curandeiro se gostar de ajudar os outros em sua Equipe, ou se a ideia de enganar a Morte através de trabalho duro o inspira!",
"optOutOfClasses": "Se Abster", "optOutOfClasses": "Se Abster",
"chooseClass": "Escolha a sua Classe", "chooseClass": "Escolha a sua Classe",
"chooseClassLearnMarkdown": "[Aprenda mais sobre o sistema de classes de Habitica](https://habitica.fandom.com/pt-br/wiki/FAQ#RPG:Classes)", "chooseClassLearnMarkdown": "[Saiba mais sobre o sistema de classes do Habitica](/static/faq#what-classes)",
"optOutOfClassesText": "Não está pronto para escolher ainda? Sem pressa! Se você escolher nada, você pode ler sobre cada Classe nas <a href='/static/faq#what-classes' target='_blank'> Perguntas Frequentes</a> e olhar as Configurações para ativar o Sistema de Classes quando você estiver pronto.", "optOutOfClassesText": "Não está pronto para escolher ainda? Sem pressa! Se você escolher nada, você pode ler sobre cada Classe nas <a href='/static/faq#what-classes' target='_blank'> Perguntas Frequentes</a> e olhar as Configurações para ativar o Sistema de Classes quando você estiver pronto.",
"selectClass": "Escolha <%= heroClass %>", "selectClass": "Escolha <%= heroClass %>",
"select": "Selecionar", "select": "Selecionar",
@@ -191,5 +191,14 @@
"skins": "Peles", "skins": "Peles",
"nextReward": "Recompensa do Próximo Check-in", "nextReward": "Recompensa do Próximo Check-in",
"titleFacialHair": "Pêlos Faciais", "titleFacialHair": "Pêlos Faciais",
"customizations": "Costumizações" "customizations": "Costumizações",
"strTaskText": "Aumenta a chance de acerto crítico e o dano ao pontuar tarefas. Também aumenta o dano causado aos chefes de missões.",
"perTaskText": "Aumenta a chance de obtenção de itens, o limite diário de obtenção de itens, os bônus de sequência de tarefas e o ouro ganho ao concluir tarefas.",
"autoAllocate": "Alocação automática",
"pointsAvailable": "Pontos disponíveis",
"allocationMethod": "Método de Alocação",
"statAllocationInfo": "Cada nível dá a você um ponto para atribuir a uma estatística de sua escolha. Você pode fazer isso manualmente ou deixar o jogo decidir por você usando uma das opções de Alocação Automática.",
"assignedStat": "Estatística atribuída",
"conTaskText": "Reduz o dano recebido por Diárias perdidas e Hábitos negativos. Não reduz o dano dos chefes de missão.",
"intTaskText": "Aumenta a experiência obtida em tarefas. Também aumenta seu limite de Mana e taxa de regeneração de Mana."
} }
+2 -1
View File
@@ -410,5 +410,6 @@
"questEggPlatypusText": "Утконос", "questEggPlatypusText": "Утконос",
"questEggPlatypusMountText": "Утконос", "questEggPlatypusMountText": "Утконос",
"questEggPlatypusAdjective": "перфекционист", "questEggPlatypusAdjective": "перфекционист",
"hatchingPotionOpal": "Опал" "hatchingPotionOpal": "Опал",
"hatchingPotionAlien": "Инопланетный"
} }
+64 -2
View File
@@ -31,7 +31,7 @@
"faqQuestion25": "Каковы различные типы задач?", "faqQuestion25": "Каковы различные типы задач?",
"faqQuestion26": "Какие есть примеры заданий?", "faqQuestion26": "Какие есть примеры заданий?",
"webFaqAnswer27": "Цвет задачи - это визуальное представление ценности задания. Все задачи начинаются с нейтрального жёлтого цвета, синий обозначает прогресс, а красный несоблюдение привычки. Вот как каждый тип задания определяет ценность задания:\n\nПривычки становятся более синими или красными в зависимости от того, нажимаете ли вы кнопку \"плюс\" или \"минус\". Положительные и отрицательные привычки со временем становятся желтыми, если вы их не выполняете. Двойные привычки меняют цвет только в зависимости от ваших данных.\n\nЕжедневные дела меняют цвет в зависимости от того, как часто они заполняются, становясь более синими по мере их заполнения или более красными, если они пропущены.\n\nЗадачи постепенно становятся все более красными, чем дольше они остаются незавершенными.\n\nЧем больше задание краснеет, тем больше золота и опыта вы заработаете за его выполнение, поэтому обязательно беритесь даже за самые сложные задания!", "webFaqAnswer27": "Цвет задачи - это визуальное представление ценности задания. Все задачи начинаются с нейтрального жёлтого цвета, синий обозначает прогресс, а красный несоблюдение привычки. Вот как каждый тип задания определяет ценность задания:\n\nПривычки становятся более синими или красными в зависимости от того, нажимаете ли вы кнопку \"плюс\" или \"минус\". Положительные и отрицательные привычки со временем становятся желтыми, если вы их не выполняете. Двойные привычки меняют цвет только в зависимости от ваших данных.\n\nЕжедневные дела меняют цвет в зависимости от того, как часто они заполняются, становясь более синими по мере их заполнения или более красными, если они пропущены.\n\nЗадачи постепенно становятся все более красными, чем дольше они остаются незавершенными.\n\nЧем больше задание краснеет, тем больше золота и опыта вы заработаете за его выполнение, поэтому обязательно беритесь даже за самые сложные задания!",
"webFaqAnswer25": "Habitica использует три различных заданий, чтобы удовлетворить ваши потребности: привычки, Ежедневные дела и задания на выполнение.\n\nПривычки могут быть положительными или отрицательными и представлять собой то, что вы, возможно, захотите отслеживать несколько раз в день или по неустановленному расписанию. Положительные привычки принесут вам награды, такие как Золото и Опыт (Exp), в то время как Отрицательные Привычки приведут к потере очков здоровья (HP).\n\nЕжедневные дела - это повторяющиеся задачи, которые вы хотите выполнять по более структурированному расписанию. Например, один раз в день, три раза в неделю или четыре раза в месяц. Пропуск ежедневных дел приводит к потере HP, но чем они сложнее, тем выше награда!\n\nЗадачи - это разовые задания, за выполнение которых вы получаете вознаграждение. У задач может быть срок выполнения, но вы не потеряете HP, если пропустите его.\n\nВыберите тип задания, который наилучшим образом соответствует тому, чего вы хотите достичь!", "webFaqAnswer25": "Habitica использует три различных типа заданий, чтобы удовлетворить ваши потребности: Привычки, Ежедневные дела и Задачи.\n\nПривычки могут быть полезными или вредными и представлять собой то, что вы, возможно, захотите отслеживать несколько раз в день или по неустановленному расписанию. Полезные Привычки принесут вам награды, такие как Золото и Опыт (Exp), в то время как Вредные Привычки приведут к потере очков здоровья (HP).\n\nЕжедневные дела - это повторяющиеся задания, которые вы хотите выполнять по более структурированному расписанию. Например, один раз в день, три раза в неделю или четыре раза в месяц. Пропуск Ежедневных дел приводит к потере HP, но чем они сложнее, тем выше награда!\n\nЗадачи - это разовые задания, за выполнение которых вы получаете вознаграждение. У Задач может быть срок выполнения, но вы не потеряете HP, если пропустите его.\n\nВыберите тип задания, который наилучшим образом соответствует тому, чего вы хотите достичь!",
"webFaqAnswer31": "Если вы выполняете Задание и теряете HP, когда этого делать не следовало, вы столкнулись с задержкой, пока сервер синхронизирует изменения, внесенные на других платформах. Например, если вы используете золото, ману или теряете HP в мобильном приложении, а затем выполняете Задание на веб-сайте, сервер просто подтверждает, что все синхронизировано.", "webFaqAnswer31": "Если вы выполняете Задание и теряете HP, когда этого делать не следовало, вы столкнулись с задержкой, пока сервер синхронизирует изменения, внесенные на других платформах. Например, если вы используете золото, ману или теряете HP в мобильном приложении, а затем выполняете Задание на веб-сайте, сервер просто подтверждает, что все синхронизировано.",
"webFaqAnswer26": "Позитивные привычки (поведение, которое вы хотите поощрять; должна быть кнопка \"плюс\")\n\n* Принимайте витамины\n* Чистите зубы зубной нитью\n* Один час занятий\n\nНегативные привычки (поведение, которое вы хотите ограничить или избежать; должна быть кнопка \"минус\")\n\n* Курение\n* Прокрастинации\n* Грызение ногтей\n\nДвойные привычки (привычки, которые предполагают выбор между положительным и отрицательным; должны быть кнопки \"плюс\" и \"минус\")\n\n* Пейте воду или газировку\n* Учеба против лени\n\nПримеры Ежедневных дел (задания, которые вы хотите повторять регулярно)\n* Мытье посуды\n* Полив растений\n* 30 минут физической активности\n\nПримеры задач (задания, которые вам нужно выполнить только один раз)\n\n* Запланировать встречу\n* Навести порядок в шкафу\n* Дописать сочинение", "webFaqAnswer26": "Позитивные привычки (поведение, которое вы хотите поощрять; должна быть кнопка \"плюс\")\n\n* Принимайте витамины\n* Чистите зубы зубной нитью\n* Один час занятий\n\nНегативные привычки (поведение, которое вы хотите ограничить или избежать; должна быть кнопка \"минус\")\n\n* Курение\n* Прокрастинации\n* Грызение ногтей\n\nДвойные привычки (привычки, которые предполагают выбор между положительным и отрицательным; должны быть кнопки \"плюс\" и \"минус\")\n\n* Пейте воду или газировку\n* Учеба против лени\n\nПримеры Ежедневных дел (задания, которые вы хотите повторять регулярно)\n* Мытье посуды\n* Полив растений\n* 30 минут физической активности\n\nПримеры задач (задания, которые вам нужно выполнить только один раз)\n\n* Запланировать встречу\n* Навести порядок в шкафу\n* Дописать сочинение",
"webFaqAnswer28": "Да! Кнопку “Остановить получение урона” можно найти в Настройках. Это предотвратит потерю HP за пропущенные Ежедневные дела. Это полезно, если вы находитесь в отпуске, нуждаетесь в отдыхе или по любой другой причине, по которой вам может потребоваться перерыв. Если вы участвуете в Квесте, ваш собственный ожидаемый прогресс будет приостановлен, но вы по-прежнему будете получать урон от пропущенных ежедневных дел ваших сокомандников.\n\nЧтобы приостановить определенные ежедневные дела, вы можете отредактировать расписание, чтобы оно выполнялось каждые 0 дней, пока вы не будете готовы перезапустить его.", "webFaqAnswer28": "Да! Кнопку “Остановить получение урона” можно найти в Настройках. Это предотвратит потерю HP за пропущенные Ежедневные дела. Это полезно, если вы находитесь в отпуске, нуждаетесь в отдыхе или по любой другой причине, по которой вам может потребоваться перерыв. Если вы участвуете в Квесте, ваш собственный ожидаемый прогресс будет приостановлен, но вы по-прежнему будете получать урон от пропущенных ежедневных дел ваших сокомандников.\n\nЧтобы приостановить определенные ежедневные дела, вы можете отредактировать расписание, чтобы оно выполнялось каждые 0 дней, пока вы не будете готовы перезапустить его.",
@@ -189,5 +189,67 @@
"faqQuestion68": "Как мне не терять здоровье?", "faqQuestion68": "Как мне не терять здоровье?",
"faqQuestion69": "Что такое характеристики персонажа?", "faqQuestion69": "Что такое характеристики персонажа?",
"webFaqAnswer68": "Если вы часто теряете очки Здоровья, попробуйте следующие советы:\n\n- Приостановите Ежедневные дела. Кнопка \"Отдохнуть\" в Настройках предотвратит потерю очков Здоровья за пропущенные Ежедневные дела.\n- Настройте расписание Ежедневных дел. Сделав так, чтобы они выполнялись каждые 0 дней, вы сможете так же выполнять их за награды, не рискуя потерять Здоровье.\n- Попробуйте использовать классовые навыки:\n\t- Разбойники могут использовать навык «Уйти в тень», чтобы предотвратить урон от пропущенных Ежедневных дел\n\t- Воины могут использовать навык «Мощный удар», чтобы снизить покраснение Ежедневного дела, уменшив, тем самым, получаемый урон в случае его пропуска\n\t- Целители могут использовать навык «Ослепляющая вспышка», чтобы снизить покраснение Ежедневного дела, уменьшив, тем самым, получаемый урон в случае его пропуска", "webFaqAnswer68": "Если вы часто теряете очки Здоровья, попробуйте следующие советы:\n\n- Приостановите Ежедневные дела. Кнопка \"Отдохнуть\" в Настройках предотвратит потерю очков Здоровья за пропущенные Ежедневные дела.\n- Настройте расписание Ежедневных дел. Сделав так, чтобы они выполнялись каждые 0 дней, вы сможете так же выполнять их за награды, не рискуя потерять Здоровье.\n- Попробуйте использовать классовые навыки:\n\t- Разбойники могут использовать навык «Уйти в тень», чтобы предотвратить урон от пропущенных Ежедневных дел\n\t- Воины могут использовать навык «Мощный удар», чтобы снизить покраснение Ежедневного дела, уменшив, тем самым, получаемый урон в случае его пропуска\n\t- Целители могут использовать навык «Ослепляющая вспышка», чтобы снизить покраснение Ежедневного дела, уменьшив, тем самым, получаемый урон в случае его пропуска",
"faqQuestion70": "Что такое Очки Характеристик?" "faqQuestion70": "Что такое Очки Характеристик?",
"contentAnswer21": "Все награды Великого торжества (снаряжение классов, облики и цвета волос, предметы трансформации и Сезонные Квесты) откроются с начала Торжества и будут доступны на всём его протяжении.",
"contentAnswer20": "С момента вступления в силу изменений в расписании Великое торжество будет проходить каждый день в течение всего года.",
"webFaqAnswer70": "Очки характеристик позволяют увеличить основные параметры вашего персонажа. Вы получаете одно очко характеристики за каждое повышение уровня (до 100-го уровня), которое можно распределить вручную или автоматически с помощью функции Автоматическое распределение. Распределение характеристик разблокируется в Системе Классов на 10 уровне.",
"faqQuestion71": "Как работает Автоматическое Распределение?",
"webFaqAnswer69": "У каждого игрока есть четыре характеристики персонажа, которые дают различные преимущества:\n\n* Сила — увеличивает шанс критического удара и урон при выполнении заданий. Также увеличивает урон, наносимый квестовым боссам.\n* Интеллект - увеличивает опыт, получаемый за выполнение заданий. Также увеличивает максимальный запас маны и скорость её восстановления.\n* Телосложение - снижает урон, получаемый от пропущенных Ежедневных дел и вредных Привычек. Не снижает урон от квестовых боссов.\n* Восприятие - увеличивает шанс выпадения предметов, дневной лимит выпадения предметов, бонусы за серию заданий и количество золота, заработанного за выполнение заданий.\n\nХарактеристики можно повышать, распределяя очки характеристик, используя снаряжение, классовые навыки и повышая уровень. Кроме того, вы получаете одно бонусное очко ко всем характеристикам каждые два уровня, вплоть до 100-го уровня.",
"sunsetFaqList6": "Испытания, которые в настоящее время размещены в Гильдиях, останутся доступными для текущих участников из их списка Испытаний, но не будут отображаться в общедоступном списке из-за соображений конфиденциальности. Создание новых Испытаний в Гильдиях будет невозможно.",
"sunsetFaqList7": "В настоящее время многие Испытания содержат задания, требующие публикации постов в общедоступных чатах Habitica. Создатели этих Испытаний могут адаптировать свои задания или перенести требование публикации из чата в сторонний сервис.",
"webFaqAnswer71": "Функция Автоматического Распределения автоматически присваивает очки характеристик в соответствии с одним из следующих методов распределения:\n\n* Равномерное распределение — присваивает одинаковое количество очков каждому атрибуту\n* Распределение по классу — присваивает больше очков атрибутам, важным для вашего класса\n* Распределение по активности выполнения заданий — присваивает очки на основе Силы, Интеллекта, Телосложения и Восприятия, в соответствии с выполненными вами заданиями\n\nЕсли вы решите не использовать Автоматическое Распределение, вы можете распределить очки характеристик вручную в разделе Характеристики.",
"sunsetFaqPara19": "<strong>Wiki-Мастера</strong><br />Wiki Habitica — это замечательный инструмент, созданный игроками для игроков, который помог очень многим. Мы продолжаем поддерживать это начинание, но больше не будем отслеживать или предлагать уровни для редактирования Wiki, поскольку переориентируем наше внимание на вклад Лингвистов, Кузнецов и Спонсоров Испытаний в рамках Habitica.",
"contentAnswer22": "Волшебные инкубационные эликсиры больше не будут привязаны к Великим торжествам и перейдут на собственный ежемесячный график выпуска, приуроченный к текущим праздникам.",
"contentAnswer301": "<strong>7-го числа каждого месяца:</strong> Выпускаются новые предметы Зачарованного сундука и один новый Фон. Фоны доступные в Магазине стилей чередуются.",
"contentAnswer52": "Мы надеемся, что это изменение поможет игрокам упорядочивать имеющиеся у них настройки при редактировании внешнего вида своего аватара, а также сохранит привычный интерфейс лавки для других приобретаемых предметов.",
"contentAnswer62": "Магические Инкубационные эликсиры ко Дню святого Валентина теперь включены в ежемесячный график.",
"contentAnswer63": "Дурацкие Питомцы будут доступны на протяжении большей части Апреля.",
"contentAnswer71": "Следите за новостями о дальнейших улучшениях Магазина Путешественников во времени.",
"contentFaqPara3": "Если у вас остались вопросы, не затронутые выше, вы всегда можете связаться с нашей командой по адресу <%= mailto %>! Мы рады новому графику выпуска контента и с нетерпением ждём новых проектов в будущем, чтобы сделать Habitica ещё лучше для всех игроков.",
"subscriptionBenefitsAdjustments": "Изменения преимуществ для подписчиков",
"subscriptionBenefitsFaqTitle": "ЧаВо по Изменениям преимуществ для подписчиков",
"subscriptionHeading0": "Изменения в Мистических песочных часах",
"subscriptionDetail00": "Все подписчики, включая получивших подписку в подарок, будут получать 1 Мистические песочные часы в начале каждого месяца, при условии активной подписки.",
"subscriptionDetail000": "Подписка на 12 месяцев принесёт вам 12 Мистических песочных часов вместо прежних 4.",
"subscriptionDetail001": "Все подписчики будут получать Мистические песочные часы по тому же графику, что и ежемесячные Наборы Загадочного Снаряжения.",
"subscriptionDetail002": "Теперь подписчики будут получать Мистические песочные часы сразу, без ожидания месяца после оплаты.",
"subscriptionDetail003": "Все новые подписчики будут получать 1 Мистические Песочные часы сразу после оплаты подписки, и это будет засчитано как получение за текущий месяц.",
"subscriptionDetail010": "Это будет в дополнение к 1 Мистическим Песочным часам, которые все новые подписчики получают после первой покупки.",
"subscriptionDetail01": "Новые 12-месячные подписки с автопродлением получат единовременный бонус — дополнительные 12 Мистических песочных часов при покупке.",
"subscriptionDetail101": "У всех подписчиков, кто сейчас получает нечётное количество Самоцветов в месяц, предел Самоцветов округлят в большую сторону до ближайшего чётного числа.",
"subscriptionDetail20": "При нынешней системе бывает сложно понять, сколько Мистических Песочных часов вы получите и когда.",
"subscriptionDetail110": "Если вы увеличили количество Самоцветов, доступных для покупки каждый месяц, а затем отменили подписку, то сможете в будущем продолжить с тем же количеством — даже если оформите подписку более низкого уровня.",
"subscriptionDetail11": "Количество Самоцветов, которые вы можете покупать каждый месяц за золото, больше не будет сбрасываться, если ваша подписка прервётся.",
"subscriptionDetail21": "Четыре уровня подписки, как известно, вызывали трудности при переходе на более высокий или низкий уровень.",
"subscriptionDetail22": "У подарочных и возобновляемых подписок были разные правила и преимущества, что создавалo путаницу, которую мы хотели упростить.",
"subscriptionDetail23": "Выдача одних Мистических Песочных часов в месяц позволяет подписчикам наслаждаться меняющимися предметами в магазине Путешественников во времени.",
"subscriptionDetail24": "Мы хотели, чтобы у подписчиков было больше четырёх шансов в год собрать предметы из магазина Путешественников во времени.",
"subscriptionDetail30": "Игроки с ежемесячной подпиской с автопродлением или Групповой подпиской получат 2 Мистических песочных часов и 20 Самоцветов.",
"subscriptionDetail31": "Игроки с подпиской с автопродлением на 3 или 6 месяцев получат 4 Мистических песочных часов и 20 Самоцветов.",
"subscriptionDetail32": "Игроки с подпиской с автопродлением на 12 месяцев получат вышеупомянутый бонус в виде 12 Мистических песочных часов и 20 Самоцветов.",
"subscriptionDetail33": "Чтобы получить эти награды, на вашем аккаунте должна быть активная подписка с автопродлением до 19 ноября.",
"subscriptionHeading2": "Зачем мы вносим эти изменения?",
"subscriptionDetail25": "Мы понимаем, что финансовое положение может меняться, и не хотели наказывать подписчиков за приостановку подписки, лишая их уже заработанных преимуществ.",
"subscriptionDetail40": "Я подписчик. Когда я получу свои первые Мистические песочные часы и увеличение Предела Самоцветов по новому графику?",
"subscriptionDetail41": "Изменится ли цена подписок после выхода этого обновления?",
"subscriptionDetail410": "Эти изменения не повлияют на текущую цену подписок.",
"subscriptionDetail42": "Если я не буду заходить в игру в течение месяца при активной подписке, потеряю ли я эти преимущества?",
"subscriptionDetail4400": "Если у вас сейчас разблокировано <%= initialNumber %> Самоцветов в месяц, вам будет установлено <%= roundedNumber %>.",
"subscriptionDetail44": "Я текущий подписчик. Сколько Самоцветов будет доступно для покупки на Рынке каждый месяц после изменений?",
"subscriptionDetail400": "Для текущих подписчиков первые Мистические песочные часы и +2 к Пределу Самоцветов будут начислены при первом входе в игру в этом месяце после выхода обновления. Это значит, что если вы уже заходили в игру в Ноябре, первое регулярное увеличение произойдёт в Декабре.",
"subscriptionDetail420": "Так же, как и с наборами загадочного снаряжения, вы не потеряете Мистические песочные часы или увеличение Предела Самоцветов, если не будете заходить в игру при активной подписке. При следующем входе вы получите все преимущества за каждый месяц, когда подписка была активна.",
"subscriptionDetail43": "Если я оформлю подписку с автопродлением, а потом отменю её, всё равно получу преимущества?",
"subscriptionDetail430": "Отмена подписки с автопродлением установит дату окончания ваших преимуществ, но до этой даты вы по-прежнему будете иметь полный доступ ко всем бонусам подписки. Это значит, что вы будете получать ежемесячные Мистические песочные часы и увеличение Предела Самоцветов в начале каждого месяца, пока у вас есть доступ к этим преимуществам.",
"subscriptionDetail440": "В день вступления этих изменений в силу у текущих подписчиков с нечётным количеством Самоцветов в месяц произойдут следующие корректировки их Предела Самоцветов:",
"subscriptionDetail45": "Поможет ли покупка дополнительных подарочных подписок получить больше Мистических Песочных часов или быстрее увеличить Предел Самоцветов?",
"subscriptionDetail450": "Поскольку Мистические песочные часы и увеличение Предела Самоцветов теперь являются ежемесячными преимуществами, покупка сразу нескольких подарочных подписок не даст дополнительных бонусов.",
"subscriptionDetail451": "Каждая подарочная подписка будет добавлять месяцы с преимуществами подписки, позволяя игроку продолжать получать Мистические песочные часы и увеличение Предела самоцветов каждый последующий месяц.",
"subscriptionDetail46": "Если у меня была подписка ранее, смогу ли я разблокировать свой прежний Предел самоцветов, если я оформлю подписку снова?",
"subscriptionDetail460": "Ранее мы сбрасывали количество Самоцветов, которые можно было покупать каждый месяц, когда преимущества подписки заканчивались. Игрокам с истёкшими преимуществами подписки придётся начинать заново в рамках новой системы.",
"subscriptionDetail47": "У меня есть Групповая подписка. Как это на меня повлияет?",
"subscriptionPara2": "Если у вас остались вопросы, не охваченные выше, вы всегда можете связаться с нашей командой по адресу <%= mailto %>.",
"subscriptionDetail48": "Будут ли изменения в других преимуществах подписки, например, в наборах Загадочного снаряжения?",
"subscriptionDetail470": "Преимущества участников Групповой подписки будут работать так же, как и у ежемесячной подписки с автопродлением. Вы будете получать Мистические песочные часы в начале каждого месяца, а количество Самоцветов, доступных для покупки на Рынке, будет увеличиваться на 2 каждый месяц до достижения 50.",
"subscriptionDetail480": "Эти изменения касаются только Мистических песочных часов и Самоцветов для подписчиков. Все остальные преимущества останутся без изменений.",
"subscriptionPara3": "Мы надеемся, что новый график будет более предсказуемым, предоставит больше доступа к потрясающему ассортименту предметов в магазине Путешественников во времени и даст ещё больше мотивации для выполнения ваших заданий каждый месяц!"
} }
+21 -2
View File
@@ -3,7 +3,7 @@
"onwards": "Samo tako nastavi!", "onwards": "Samo tako nastavi!",
"levelup": "Radeći na svojim ciljevima, napredovali ste za nivo i sada ste potpuno izlečeni!", "levelup": "Radeći na svojim ciljevima, napredovali ste za nivo i sada ste potpuno izlečeni!",
"reachedLevel": "Dostigli ste nivo <%= level %>", "reachedLevel": "Dostigli ste nivo <%= level %>",
"achievementLostMasterclasser": "Komplet Pustolovina: Ekspert Serija", "achievementLostMasterclasser": "Komplet Pustolovina: Masterklas Serija",
"achievementLostMasterclasserText": "Završeno je svih 16 pustolovina Ekspert Serije i rešena misterija Izgubljenog Eksperta!", "achievementLostMasterclasserText": "Završeno je svih 16 pustolovina Ekspert Serije i rešena misterija Izgubljenog Eksperta!",
"foundNewItemsCTA": "Idi do inventara i spoji napitak za izleganje sa jajetom!", "foundNewItemsCTA": "Idi do inventara i spoji napitak za izleganje sa jajetom!",
"foundNewItemsExplanation": "Završavanje zadataka ti pomaže da pronađeš stvari kao što su Jaja, Napici za Izleganje i Hrana za Ljubimce.", "foundNewItemsExplanation": "Završavanje zadataka ti pomaže da pronađeš stvari kao što su Jaja, Napici za Izleganje i Hrana za Ljubimce.",
@@ -46,5 +46,24 @@
"achievementAllYourBaseModalText": "Primitomio/la si sve Osnovne Životinje za Jahanje!", "achievementAllYourBaseModalText": "Primitomio/la si sve Osnovne Životinje za Jahanje!",
"achievementAllYourBaseText": "Primitomljene sve Osnovne Životinje za Jahanje.", "achievementAllYourBaseText": "Primitomljene sve Osnovne Životinje za Jahanje.",
"achievementDustDevil": "Pustinjski Vrag", "achievementDustDevil": "Pustinjski Vrag",
"achievementJustAddWaterText": "Završene su Hobotnica, Morski Konjić, Sipa, Kit, Kornjača, Morski Puž, Morska Neman i Delfin pustolovine." "achievementJustAddWaterText": "Završene su Hobotnica, Morski Konjić, Sipa, Kit, Kornjača, Morski Puž, Morska Neman i Delfin pustolovine.",
"achievementUndeadUndertakerText": "Ukrotio je sve zombi jahute.",
"achievementAridAuthorityText": "Ukrotio je sve pustinjske jahače.",
"achievementAridAuthorityModalText": "Ukrotio si sve pustinjske jahače!",
"achievementCreatedTaskText": "Napravio je svoj prvi zadatak.",
"achievementMonsterMagusModalText": "Sakupio si sve zombi ljubimice!",
"achievementMonsterMagusText": "Sakupio je sve zombi ljubimce.",
"achievementPartyUp": "Udružio si se sa članom družine!",
"achievementUndeadUndertakerModalText": "Ukrotio si sve zombi jahute!",
"achievementCreatedTask": "Napravite svoj prvi zadatak",
"achievementPartyOn": "Vaša družina je porasla na 4 člana!",
"achievementHatchedPet": "Izlegni Ljubimca",
"achievementHatchedPetText": "je izlegao svog prvog ljubimca.",
"achievementPurchasedEquipment": "je kupio deo Opreme",
"achievementCompletedTaskText": "je završio svoj prvi zadatak.",
"achievementCreatedTaskModalText": "Dodaj zadatak za nešto što bi ti voleo da postigneš ove nedelje",
"achievementCompletedTask": "Završi zadatak",
"achievementFedPetModalText": "Ima mnogo hrane, ali ti mali su izbirljivi",
"achievementHatchedPetModalText": "Idi do svojeg inventara i probaj da kombinuješ Napitak za izleganje i Jaje",
"achievementCompletedTaskModalText": "Čekiraj bilo koji od tvojih zadataka da dobiješ nagrade"
} }
+1 -1
View File
@@ -3,7 +3,7 @@
"dontDespair": "Ne očajavaj!", "dontDespair": "Ne očajavaj!",
"deathPenaltyDetails": "Izgubili ste Nivo, vaše zlato i deo Opreme, ali ih možete sve dobiti nazad sa upornim radom! Srećno -- bićeš super.", "deathPenaltyDetails": "Izgubili ste Nivo, vaše zlato i deo Opreme, ali ih možete sve dobiti nazad sa upornim radom! Srećno -- bićeš super.",
"refillHealthTryAgain": "Dopunite Zdravlje i pokušajte ponovo", "refillHealthTryAgain": "Dopunite Zdravlje i pokušajte ponovo",
"dyingOftenTips": "Da li se ovo dešava često? <a href='http://habitica.fandom.com/wiki/Death_Mechanics#Strategies_for_Staying_Alive' target='_blank'>Evo vam par saveta!</a>", "dyingOftenTips": "Da li se ovo dešava često? <a href='/static/faq#prevent-damage' target='_blank'>Evo vam par saveta!</a>",
"losingHealthWarning": "Pažljivo - Gubite Zdravlje!", "losingHealthWarning": "Pažljivo - Gubite Zdravlje!",
"losingHealthWarning2": "Nemojte dopustiti da vaše Zdravlje padne na nulu! Ako to dopustite, izgubićete nivo, zlato i deo opreme.", "losingHealthWarning2": "Nemojte dopustiti da vaše Zdravlje padne na nulu! Ako to dopustite, izgubićete nivo, zlato i deo opreme.",
"toRegainHealth": "Kako biste vratili Zdravlje:", "toRegainHealth": "Kako biste vratili Zdravlje:",
+7 -1
View File
@@ -163,5 +163,11 @@
"siteData": "Podaci o sajtu", "siteData": "Podaci o sajtu",
"taskSettings": "Podešavanja za Zadatke", "taskSettings": "Podešavanja za Zadatke",
"confirmCancelChanges": "Jesi li siguran? Izgubićeš ne sačuvane izmene.", "confirmCancelChanges": "Jesi li siguran? Izgubićeš ne sačuvane izmene.",
"account": "Nalog" "account": "Nalog",
"loginMethods": "Metode prijave",
"character": "Lik",
"siteLanguage": "Jezik stranice",
"showLevelUpModal": "Kad dobijete nivo",
"showRaisePetModal": "Kad ljubimac postane montura",
"showStreakModal": "Kad osvojite streak achievement"
} }
+22 -1
View File
@@ -165,5 +165,26 @@
"contentAnswer201": "<strong>Осінній Фестиваль</strong>: з 21 вересня до 20 грудня", "contentAnswer201": "<strong>Осінній Фестиваль</strong>: з 21 вересня до 20 грудня",
"contentAnswer20": "Щойно зміни в розкладі набудуть чинності, у грі щодня, протягом усього року, буде активно принаймні одне Велике Свято.", "contentAnswer20": "Щойно зміни в розкладі набудуть чинності, у грі щодня, протягом усього року, буде активно принаймні одне Велике Свято.",
"contentAnswer200": "<strong>Літній сплеск</strong>: з 21 червня по 20 вересня", "contentAnswer200": "<strong>Літній сплеск</strong>: з 21 червня по 20 вересня",
"contentAnswer10": "Habitica існує з 2013го (нічого собі!) і за цей час ми випустили тисячі речей, які гравці можуть колекціонувати. Але у них дуже легко заплутатись, особливо новим гравцям. Ми хочемо впевнитись, що показуємо усі доступні опції, і що неймовірні предмети випущені в минулому не будуть затьмарені новими." "contentAnswer10": "Habitica існує з 2013го (нічого собі!) і за цей час ми випустили тисячі речей, які гравці можуть колекціонувати. Але у них дуже легко заплутатись, особливо новим гравцям. Ми хочемо впевнитись, що показуємо усі доступні опції, і що неймовірні предмети випущені в минулому не будуть затьмарені новими.",
"contentAnswer53": "Крамницю Персоналізації можна буде знайти поруч з іншими крамницями в меню.",
"contentAnswer61": "Листівки до Дня святого Валентина та Нового року випускатимуться у визначені дати.",
"contentAnswer50": "Крамниця Персоналізації — це нове місце для всіх товарів для Налаштування Аватара, зокрема:",
"contentAnswer51": "Придбані та стандартні елементи оздоблення, якими ви володієте, будуть доступні у звичному інтерфейсі Налаштування Аватара.",
"contentQuestion6": "Що станеться з іншими сезонними подіями, як-от Габітовін, День сміху та День народження?",
"contentAnswer62": "Магічні Інкубаційні еліксири до Дня святого Валентина тепер включені до щомісячного розкладу.",
"contentAnswer71": "Слідкуйте за новими повідомленнями про заплановані покращення у роботі Крамниці Мандрівників у часі.",
"subscriptionBenefitsAdjustments": "Коригування переваг для підписників",
"subscriptionBenefitsFaqTitle": "ЧаПи про коригування переваг для підписників",
"subscriptionHeading0": "Зміни до Містичних пісочних годинників",
"contentAnswer501": "Типи шкіри",
"subscriptionDetail00": "Усі підписники, включно з тими, хто отримав підписку в подарунок, отримуватимуть 1 Містичний пісочний годинник на початку кожного місяця дії переваг підписки.",
"subscriptionDetail000": "За 12 місяців підписки ви отримаєте 12 Містичних пісочних годинників замість 4, як було раніше.",
"contentAnswer502": "Кольори та стилі волосся",
"contentAnswer63": "Дивовижні вихованці залишатимуться доступними протягом більшої частини квітня.",
"contentAnswer52": "Ми сподіваємося, що ця зміна допоможе гравцям упорядковувати наявні у них персоналізації при редагуванні зовнішнього вигляду свого аватара, зберігаючи при цьому звичний інтерфейс крамниці для інших товарів.",
"contentAnswer60": "Усі інші поточні події триватимуть як зазвичай! Кожен і надалі отримуватиме свої особливі нагороди та тематичну їжу, як і зараз.",
"contentQuestion7": "Що щодо інших предметів, доступних у Крамниці Мандрівників у часі, окрім минулих наборів для підписників?",
"contentAnswer70": "Фони, Квести, Улюбленці та Скакуни, доступні у Крамниці Мандрівників у часі, залишатимуться в продажу протягом усього року.",
"contentFaqPara3": "Якщо у вас виникли запитання, на які немає відповідей вище, ви завжди можете зв’язатися з нашою командою за адресою <%= mailto %>! Ми в захваті від цього нового графіка випуску контенту та з нетерпінням чекаємо на ще більше проєктів у майбутньому, щоб зробити Habitica кращою для всіх гравців.",
"subscriptionPara0": "Ми робимо підписки Habitica кращими, ніж будь-коли, додаючи ще більше Містичних пісочних годинників та Самоцвітів! Ці зміни значно спрощують розумінні переваг вашої підписки."
} }
@@ -227,6 +227,7 @@ api.postChat = {
} }
await Promise.all(toSave); await Promise.all(toSave);
await group.trimChat();
if (chatUpdated) { if (chatUpdated) {
res.respond(200, { chat: chatRes.chat }); res.respond(200, { chat: chatRes.chat });
+1 -13
View File
@@ -1,25 +1,13 @@
import _ from 'lodash'; import _ from 'lodash';
import { chatModel as Chat } from '../../models/message'; import { chatModel as Chat } from '../../models/message';
import shared from '../../../common'; import shared from '../../../common';
import { // eslint-disable-line import/no-cycle
MAX_CHAT_COUNT,
MAX_SUBBED_GROUP_CHAT_COUNT,
} from '../../models/group';
const questScrolls = shared.content.quests; const questScrolls = shared.content.quests;
// @TODO: Don't use this method when the group can be saved. // @TODO: Don't use this method when the group can be saved.
export async function getGroupChat (group, options = {}) { export async function getGroupChat (group, options = {}) {
const { limit, before } = options; const { limit, before } = options;
const effectiveLimit = group.getEffectiveChatLimit(limit);
let maxChatCount = MAX_CHAT_COUNT;
if (group.chatLimitCount && group.chatLimitCount >= MAX_CHAT_COUNT) {
maxChatCount = group.chatLimitCount;
} else if (group.hasActiveGroupPlan()) {
maxChatCount = MAX_SUBBED_GROUP_CHAT_COUNT;
}
const effectiveLimit = limit !== undefined ? Math.min(limit, maxChatCount) : maxChatCount;
let query = Chat.find({ groupId: group._id }) let query = Chat.find({ groupId: group._id })
.sort('-timestamp'); .sort('-timestamp');
+4
View File
@@ -331,6 +331,7 @@ api.ipn = async function ipnApi (options = {}) {
'recurring_payment_profile_cancel', 'recurring_payment_profile_cancel',
'recurring_payment_failed', 'recurring_payment_failed',
'recurring_payment_expired', 'recurring_payment_expired',
'recurring_payment_skipped',
'subscr_cancel', 'subscr_cancel',
'subscr_failed', 'subscr_failed',
]; ];
@@ -345,6 +346,9 @@ api.ipn = async function ipnApi (options = {}) {
// resulting in the loss of subscription credits // resulting in the loss of subscription credits
if (user.hasCancelled()) return; if (user.hasCancelled()) return;
if (txn_type === 'recurring_payment_skipped') {
await this.paypalBillingAgreementCancel(recurring_payment_id, { note: 'Missed payment' });
}
await payments.cancelSubscription({ user, paymentMethod: this.constants.PAYMENT_METHOD }); await payments.cancelSubscription({ user, paymentMethod: this.constants.PAYMENT_METHOD });
return; return;
} }
+17 -3
View File
@@ -1,8 +1,9 @@
import nconf from 'nconf';
import express from 'express'; import express from 'express';
import expressValidator from 'express-validator'; import expressValidator from 'express-validator';
import path from 'path'; import path from 'path';
import setupBody from './setupBody'; import setupBody from './setupBody';
import rateLimiter from './rateLimiter'; import setupRateLimiter from './rateLimiter';
import setupExpress from '../libs/setupExpress'; import setupExpress from '../libs/setupExpress';
import * as routes from '../libs/routes'; import * as routes from '../libs/routes';
@@ -10,6 +11,10 @@ const API_V3_CONTROLLERS_PATH = path.join(__dirname, '/../controllers/api-v3/');
const API_V4_CONTROLLERS_PATH = path.join(__dirname, '/../controllers/api-v4/'); const API_V4_CONTROLLERS_PATH = path.join(__dirname, '/../controllers/api-v4/');
const TOP_LEVEL_CONTROLLERS_PATH = path.join(__dirname, '/../controllers/top-level/'); const TOP_LEVEL_CONTROLLERS_PATH = path.join(__dirname, '/../controllers/top-level/');
const RATE_LIMITER_V4_POINTS = nconf.get('RATE_LIMITER_V4_POINTS') || 200;
const RATE_LIMITER_V4_REGISTRATION_COST = nconf.get('RATE_LIMITER_V4_REGISTRATION_COST') || 15;
const RATE_LIMITER_V4_LOGIN_COST = nconf.get('RATE_LIMITER_V4_LOGIN_COST') || 10;
const app = express(); const app = express();
// re-set the view options because they are not inherited from the top level app // re-set the view options because they are not inherited from the top level app
@@ -25,7 +30,10 @@ app.use('/', topLevelRouter);
const v3Router = express.Router(); // eslint-disable-line new-cap const v3Router = express.Router(); // eslint-disable-line new-cap
routes.walkControllers(v3Router, API_V3_CONTROLLERS_PATH); routes.walkControllers(v3Router, API_V3_CONTROLLERS_PATH);
app.use('/api/v3', rateLimiter, v3Router); const v3RateLimiter = setupRateLimiter({
keyPrefix: 'api-v3',
});
app.use('/api/v3', v3RateLimiter, v3Router);
// API v4 proxies API v3 routes by default. // API v4 proxies API v3 routes by default.
// It can also disable or override v3 routes // It can also disable or override v3 routes
@@ -49,6 +57,12 @@ const v4RouterOverrides = [
const v4Router = express.Router(); // eslint-disable-line new-cap const v4Router = express.Router(); // eslint-disable-line new-cap
routes.walkControllers(v4Router, API_V3_CONTROLLERS_PATH, v4RouterOverrides); routes.walkControllers(v4Router, API_V3_CONTROLLERS_PATH, v4RouterOverrides);
routes.walkControllers(v4Router, API_V4_CONTROLLERS_PATH); routes.walkControllers(v4Router, API_V4_CONTROLLERS_PATH);
app.use('/api/v4', v4Router); const v4RateLimiter = setupRateLimiter({
keyPrefix: 'api-v4',
points: RATE_LIMITER_V4_POINTS,
registrationCost: RATE_LIMITER_V4_REGISTRATION_COST,
loginCost: RATE_LIMITER_V4_LOGIN_COST,
});
app.use('/api/v4', v4RateLimiter, v4Router);
export default app; export default app;
+76 -65
View File
@@ -23,55 +23,40 @@ const REDIS_HOST = nconf.get('REDIS_HOST');
const REDIS_PASSWORD = nconf.get('REDIS_PASSWORD'); const REDIS_PASSWORD = nconf.get('REDIS_PASSWORD');
const REDIS_PORT = nconf.get('REDIS_PORT'); const REDIS_PORT = nconf.get('REDIS_PORT');
const LIVELINESS_PROBE_KEY = nconf.get('LIVELINESS_PROBE_KEY'); const LIVELINESS_PROBE_KEY = nconf.get('LIVELINESS_PROBE_KEY');
const REGISTRATION_COST = nconf.get('RATE_LIMITER_REGISTRATION_COST') || 5; const BASE_POINTS = nconf.get('RATE_LIMITER_BASE_POINTS') || 30;
const BASE_DURATION = nconf.get('RATE_LIMITER_BASE_DURATION') || 60;
const REGISTRATION_COST = nconf.get('RATE_LIMITER_REGISTRATION_COST') || 10;
const LOGIN_COST = nconf.get('RATE_LIMITER_LOGIN_COST') || 10;
const IP_RATE_LIMIT_COST = nconf.get('RATE_LIMITER_IP_COST') || 5; const IP_RATE_LIMIT_COST = nconf.get('RATE_LIMITER_IP_COST') || 5;
let redisClient; let redisClient;
let rateLimiter;
const rateLimiterOpts = { if (RATE_LIMITER_ENABLED && !IS_TEST) {
keyPrefix: 'api-v3', redisClient = redis.createClient({
points: 30, // 30 requests host: REDIS_HOST,
duration: 60, // per 1 minute by User ID or IP password: REDIS_PASSWORD,
}; port: REDIS_PORT,
enable_offline_queue: false,
});
if (RATE_LIMITER_ENABLED) { redisClient.on('ready', () => {
if (IS_TEST) { SERVER_STATUS.REDIS = true;
rateLimiter = new RateLimiterMemory({ });
...rateLimiterOpts,
});
} else {
redisClient = redis.createClient({
host: REDIS_HOST,
password: REDIS_PASSWORD,
port: REDIS_PORT,
enable_offline_queue: false,
});
redisClient.on('ready', () => { redisClient.on('reconnecting', () => {
SERVER_STATUS.REDIS = true; SERVER_STATUS.REDIS = false;
}); });
redisClient.on('reconnecting', () => { redisClient.on('error', error => {
SERVER_STATUS.REDIS = false; logger.error(error, 'Redis Error');
}); });
redisClient.on('error', error => {
logger.error(error, 'Redis Error');
});
rateLimiter = new RateLimiterRedis({
...rateLimiterOpts,
storeClient: redisClient,
});
}
} else { } else {
SERVER_STATUS.REDIS = true; SERVER_STATUS.REDIS = true;
} }
function setResponseHeaders (res, rateLimiterRes) { function setResponseHeaders (res, points, rateLimiterRes) {
const headers = { const headers = {
'X-RateLimit-Limit': rateLimiterOpts.points, 'X-RateLimit-Limit': points,
'X-RateLimit-Remaining': rateLimiterRes.remainingPoints, 'X-RateLimit-Remaining': rateLimiterRes.remainingPoints,
'X-RateLimit-Reset': new Date(Date.now() + rateLimiterRes.msBeforeNext), 'X-RateLimit-Reset': new Date(Date.now() + rateLimiterRes.msBeforeNext),
}; };
@@ -83,34 +68,60 @@ function setResponseHeaders (res, rateLimiterRes) {
res.set(headers); res.set(headers);
} }
export default function rateLimiterMiddleware (req, res, next) { export default function setupRateLimiter (options = {}) {
if (!RATE_LIMITER_ENABLED) return next(); const rateLimiterOpts = {
if (LIVELINESS_PROBE_KEY && req.query.liveliness === LIVELINESS_PROBE_KEY) return next(); keyPrefix: options.keyPrefix || 'api',
points: options.points || BASE_POINTS, // 30 requests
const userId = req.header('x-api-user'); duration: options.duration || BASE_DURATION, // per 1 minute by User ID or IP
};
let cost = 1; let rateLimiter;
if (req.path === '/api/v4/user/auth/local/register' || req.path === '/api/v3/user/auth/local/register') { if (!RATE_LIMITER_ENABLED) {
cost = REGISTRATION_COST; return (req, res, next) => next();
} else if (!userId) {
cost = IP_RATE_LIMIT_COST;
} }
if (IS_TEST) {
return rateLimiter.consume(userId || req.ip, cost) rateLimiter = new RateLimiterMemory({
.then(rateLimiterRes => { ...rateLimiterOpts,
setResponseHeaders(res, rateLimiterRes);
return next();
})
.catch(rateLimiterRes => {
if (rateLimiterRes instanceof RateLimiterRes) {
setResponseHeaders(res, rateLimiterRes);
return next(new TooManyRequests(apiError('clientRateLimited')));
}
// In case of an unhandled error we skip the middleware as it could mean
// , for example, that the connection to the redis database is not working.
// We do not want to block all requests in these cases.
logger.error(rateLimiterRes, 'Rate Limiter Error');
return next();
}); });
} else {
rateLimiter = new RateLimiterRedis({
...rateLimiterOpts,
storeClient: redisClient,
});
}
return function rateLimiterMiddleware (req, res, next) {
if (!RATE_LIMITER_ENABLED) return next();
if (LIVELINESS_PROBE_KEY && req.query.liveliness === LIVELINESS_PROBE_KEY) return next();
const userId = req.header('x-api-user');
let cost = 1;
const url = req.path || '';
if (url.indexOf('/user/auth/local/register') > 0) {
cost = options.registrationCost || REGISTRATION_COST;
} else if (url.indexOf('/user/auth/local/login') > 0) {
cost = options.loginCost || LOGIN_COST;
} else if (url.indexOf('/auth/verify-username') > 0) {
cost = 1; // Verifying username might happen multiple times during typing
} else if (!userId) {
cost = options.ipRateLimitCost || IP_RATE_LIMIT_COST;
}
return rateLimiter.consume(userId || req.ip, cost)
.then(rateLimiterRes => {
setResponseHeaders(res, rateLimiterOpts.points, rateLimiterRes);
return next();
})
.catch(rateLimiterRes => {
if (rateLimiterRes instanceof RateLimiterRes) {
setResponseHeaders(res, rateLimiterOpts.points, rateLimiterRes);
return next(new TooManyRequests(apiError('clientRateLimited')));
}
// In case of an unhandled error we skip the middleware as it could mean
// , for example, that the connection to the redis database is not working.
// We do not want to block all requests in these cases.
logger.error(rateLimiterRes, 'Rate Limiter Error');
return next();
});
};
} }
+23
View File
@@ -497,6 +497,17 @@ schema.statics.validateInvitations = async function getInvitationErr (invites, r
} }
}; };
schema.methods.getEffectiveChatLimit = function getEffectiveChatLimit (limit) {
let maxChatCount = MAX_CHAT_COUNT;
if (this.chatLimitCount && this.chatLimitCount >= MAX_CHAT_COUNT) {
maxChatCount = this.chatLimitCount;
} else if (this.hasActiveGroupPlan()) {
maxChatCount = MAX_SUBBED_GROUP_CHAT_COUNT;
}
return limit !== undefined ? Math.min(limit, maxChatCount) : maxChatCount;
};
schema.methods.getParticipatingQuestMembers = function getParticipatingQuestMembers () { schema.methods.getParticipatingQuestMembers = function getParticipatingQuestMembers () {
return Object.keys(this.quest.members).filter(member => this.quest.members[member]); return Object.keys(this.quest.members).filter(member => this.quest.members[member]);
}; };
@@ -654,6 +665,18 @@ schema.methods.sendChat = async function sendChat (options = {}) {
return newChatMessage; return newChatMessage;
}; };
schema.methods.trimChat = async function trimChat (limit) {
const query = Chat.find({ groupId: this._id })
.sort('-timestamp')
.skip(limit || (this.getEffectiveChatLimit() * 2))
.limit(1);
const lastMessage = await query.exec();
if (lastMessage && lastMessage.length > 0) {
const lastMessageTimestamp = lastMessage[0].timestamp;
await Chat.deleteMany({ groupId: this._id, timestamp: { $lte: lastMessageTimestamp } }).exec();
}
};
// eslint-disable-next-line max-len // eslint-disable-next-line max-len
schema.methods.handleQuestInvitation = async function handleQuestInvitation (user, accept, session) { schema.methods.handleQuestInvitation = async function handleQuestInvitation (user, accept, session) {
if (!user) throw new InternalServerError('Must provide user to handle quest invitation'); if (!user) throw new InternalServerError('Must provide user to handle quest invitation');