Compare commits

...

60 Commits

Author SHA1 Message Date
SabreCat 3b8a9d59b1 4.215.1 2021-12-22 15:00:01 -06:00
SabreCat f2cfc2744d fix(Slack): improve subscription notif logic 2021-12-22 14:58:15 -06:00
SabreCat e2fd6a72c2 fix(test): correct stub restore 2021-12-21 16:25:29 -06:00
SabreCat 60ea8e48a8 fix(test): return empty event list for no promo 2021-12-21 16:01:27 -06:00
SabreCat e74a3f84f5 fix(string): missing token 2021-12-21 15:49:55 -06:00
SabreCat fbc0ccfab1 4.215.0 2021-12-21 15:33:58 -06:00
SabreCat c299e2e4d3 chore(sprites): compile 2021-12-21 15:32:20 -06:00
SabreCat 685ba1286e feat(content): Winter Wonderland 2021-22 2021-12-21 15:32:11 -06:00
SabreCat 741ddd9006 4.214.6 2021-12-17 14:01:06 -06:00
SabreCat 5986d0ea02 fix(g1g1): correct availability window 2021-12-17 14:00:59 -06:00
SabreCat 831cce65e2 4.214.5 2021-12-15 16:42:34 -06:00
SabreCat 64c732e991 fix(test): stub event list not singleton 2021-12-15 16:32:58 -06:00
SabreCat 391a9bd91b feat(promo): G1G1 2021
Also refactors a number of places on web client to start using event 
list from world state instead of singular currentEvent
2021-12-15 16:20:43 -06:00
negue a1cddcaf17 Feature: new "report a bug" modal (#13530)
* WIP: report a bug api/ui

* fix lint

* add USER_USERNAME

* extend sendTxn tests / checks + fix bug report email

* fix lint

* add more checks to sendTxn - fix bug-report variables

* fix lint / ci

* fix test: reset email config url

* fix test stub

* fix tests

* refactor the variables checks

* lint.

* move bug-report page as a modal

* send user_email to the email

* show true/false instead 1/0

* fix issues

* fix footer report bug email if not logged in

* fix styles/margins

* prefill user's email

* show facebook email if local email not existing

* bugReportSuccessModal.vue

* add BROWSER_UA to mail properties

* extract bugReportLogic to its own lib file for unit test

* test api validators

* fix lint
2021-12-14 19:16:50 -06:00
negue c37dac5568 FIX: refactor notifications position based on different promo banners (#13679) 2021-12-14 19:14:38 -06:00
Natalie L 9e0e805d35 Fix: Updated challenge.js to allow shortName to be editable by party leader (#13654)
* updated challenge.js to allow shortName to be editable

* fix api-v3 integration test error
2021-12-14 15:54:57 -06:00
SabreCat a174b218bd chore(heroku): remove unbuilt sprites 2021-12-14 14:28:58 -06:00
SabreCat 67fdb4dcb3 Merge branch 'release' into develop 2021-12-14 14:23:07 -06:00
SabreCat ecc04c6a69 chore(TOS): update terms 2021-12-14 14:22:25 -06:00
dependabot[bot] 21367f418e build(deps): bump @storybook/addon-actions in /website/client (#13695)
Bumps [@storybook/addon-actions](https://github.com/storybookjs/storybook/tree/HEAD/addons/actions) from 6.3.12 to 6.4.9.
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v6.4.9/addons/actions)

---
updated-dependencies:
- dependency-name: "@storybook/addon-actions"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-12-13 16:09:11 -06:00
dependabot[bot] 16508f934b build(deps): bump universal-analytics from 0.4.23 to 0.5.2 (#13697)
Bumps [universal-analytics](https://github.com/peaksandpies/universal-analytics) from 0.4.23 to 0.5.2.
- [Release notes](https://github.com/peaksandpies/universal-analytics/releases)
- [Changelog](https://github.com/peaksandpies/universal-analytics/blob/master/HISTORY.md)
- [Commits](https://github.com/peaksandpies/universal-analytics/commits/0.5.2)

---
updated-dependencies:
- dependency-name: universal-analytics
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-12-13 15:55:02 -06:00
dependabot[bot] e387f2f782 build(deps): bump @storybook/addons in /website/client (#13693)
Bumps [@storybook/addons](https://github.com/storybookjs/storybook/tree/HEAD/lib/addons) from 6.3.12 to 6.4.9.
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v6.4.9/lib/addons)

---
updated-dependencies:
- dependency-name: "@storybook/addons"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-12-13 15:54:45 -06:00
dependabot[bot] 429810f50f build(deps): bump @babel/preset-env from 7.16.0 to 7.16.4 (#13640)
Bumps [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) from 7.16.0 to 7.16.4.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.16.4/packages/babel-preset-env)

---
updated-dependencies:
- dependency-name: "@babel/preset-env"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-12-13 15:52:43 -06:00
dependabot[bot] fcd5c38460 build(deps): bump @google-cloud/trace-agent from 5.1.5 to 5.1.6 (#13638)
Bumps [@google-cloud/trace-agent](https://github.com/googleapis/cloud-trace-nodejs) from 5.1.5 to 5.1.6.
- [Release notes](https://github.com/googleapis/cloud-trace-nodejs/releases)
- [Changelog](https://github.com/googleapis/cloud-trace-nodejs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/googleapis/cloud-trace-nodejs/compare/v5.1.5...v5.1.6)

---
updated-dependencies:
- dependency-name: "@google-cloud/trace-agent"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-12-13 15:52:31 -06:00
Natalie L 042ae6e228 Merge pull request #13694 from HabitRPG/dependabot/npm_and_yarn/website/client/core-js-3.19.3
build(deps): bump core-js from 3.19.2 to 3.19.3 in /website/client
2021-12-13 16:33:15 -05:00
Natalie L a21e914f86 Merge pull request #13692 from HabitRPG/dependabot/npm_and_yarn/website/client/storybook/addon-links-6.4.9
build(deps): bump @storybook/addon-links from 6.3.12 to 6.4.9 in /website/client
2021-12-13 16:32:28 -05:00
Natalie L d46e7f8aff Merge pull request #13691 from HabitRPG/dependabot/npm_and_yarn/stripe-8.193.0
build(deps): bump stripe from 8.191.0 to 8.193.0
2021-12-13 16:29:52 -05:00
Natalie L 6e9cf80079 Merge pull request #13686 from HabitRPG/dependabot/npm_and_yarn/express-basic-auth-1.2.1
build(deps): bump express-basic-auth from 1.2.0 to 1.2.1
2021-12-13 16:14:39 -05:00
Natalie L 60843e6afa Merge pull request #13684 from HabitRPG/dependabot/npm_and_yarn/body-parser-1.19.1
build(deps): bump body-parser from 1.19.0 to 1.19.1
2021-12-13 16:14:10 -05:00
dependabot[bot] 9c281b8010 build(deps): bump core-js from 3.19.2 to 3.19.3 in /website/client
Bumps [core-js](https://github.com/zloirock/core-js) from 3.19.2 to 3.19.3.
- [Release notes](https://github.com/zloirock/core-js/releases)
- [Changelog](https://github.com/zloirock/core-js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zloirock/core-js/compare/v3.19.2...v3.19.3)

---
updated-dependencies:
- dependency-name: core-js
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-12-13 05:11:38 +00:00
dependabot[bot] 775730ff02 build(deps): bump @storybook/addon-links in /website/client
Bumps [@storybook/addon-links](https://github.com/storybookjs/storybook/tree/HEAD/addons/links) from 6.3.12 to 6.4.9.
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v6.4.9/addons/links)

---
updated-dependencies:
- dependency-name: "@storybook/addon-links"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-12-13 05:07:21 +00:00
dependabot[bot] 409f3bfa27 build(deps): bump stripe from 8.191.0 to 8.193.0
Bumps [stripe](https://github.com/stripe/stripe-node) from 8.191.0 to 8.193.0.
- [Release notes](https://github.com/stripe/stripe-node/releases)
- [Changelog](https://github.com/stripe/stripe-node/blob/master/CHANGELOG.md)
- [Commits](https://github.com/stripe/stripe-node/compare/v8.191.0...v8.193.0)

---
updated-dependencies:
- dependency-name: stripe
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-12-13 05:06:24 +00:00
dependabot[bot] c425f85378 build(deps): bump express-basic-auth from 1.2.0 to 1.2.1
Bumps [express-basic-auth](https://github.com/LionC/express-basic-auth) from 1.2.0 to 1.2.1.
- [Release notes](https://github.com/LionC/express-basic-auth/releases)
- [Commits](https://github.com/LionC/express-basic-auth/compare/v1.2.0...v1.2.1)

---
updated-dependencies:
- dependency-name: express-basic-auth
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-12-13 05:03:12 +00:00
dependabot[bot] 59fa547e20 build(deps): bump body-parser from 1.19.0 to 1.19.1
Bumps [body-parser](https://github.com/expressjs/body-parser) from 1.19.0 to 1.19.1.
- [Release notes](https://github.com/expressjs/body-parser/releases)
- [Changelog](https://github.com/expressjs/body-parser/blob/master/HISTORY.md)
- [Commits](https://github.com/expressjs/body-parser/compare/1.19.0...1.19.1)

---
updated-dependencies:
- dependency-name: body-parser
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-12-13 05:02:38 +00:00
SabreCat 389768d9e3 4.214.4 2021-12-10 14:11:38 -06:00
SabreCat 938cda1fcf fix(privacy): fussy wording 2021-12-10 14:11:27 -06:00
SabreCat 495b34124d 4.214.3 2021-12-10 09:58:48 -06:00
Craig Inches af9a12bb20 Alter naming to match expected elsewhere (#13682) 2021-12-10 09:58:36 -06:00
Craig Inches 9e1e4248a5 Alter naming to match expected elsewhere (#13682) 2021-12-10 09:43:34 -06:00
SabreCat 8b4074015f 4.214.2 2021-12-09 16:45:03 -06:00
SabreCat 94d666e8b9 Merge branch 'develop' into release 2021-12-09 16:44:55 -06:00
SabreCat 1e8222af15 Revert "Revert "chore(legal): updates to Privacy Policy""
This reverts commit d995a7484b.
2021-12-09 16:43:31 -06:00
SabreCat de89032491 fix(privacy): line edits 2021-12-09 16:25:01 -06:00
SabreCat 7a67d87ce1 4.214.1 2021-12-08 10:02:51 -06:00
SabreCat 90a1fabcdf Merge branch 'develop' into release 2021-12-08 10:02:44 -06:00
Weblate caac438858 Translated using Weblate (German)
Currently translated at 100.0% (193 of 193 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (661 of 661 strings)

Translated using Weblate (Japanese)

Currently translated at 99.6% (659 of 661 strings)

Translated using Weblate (German)

Currently translated at 100.0% (661 of 661 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (2481 of 2481 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (661 of 661 strings)

Translated using Weblate (Vietnamese)

Currently translated at 96.2% (179 of 186 strings)

Translated using Weblate (French)

Currently translated at 100.0% (193 of 193 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 99.6% (2473 of 2481 strings)

Translated using Weblate (French)

Currently translated at 100.0% (2481 of 2481 strings)

Translated using Weblate (French)

Currently translated at 100.0% (746 of 746 strings)

Translated using Weblate (French)

Currently translated at 100.0% (127 of 127 strings)

Translated using Weblate (French)

Currently translated at 100.0% (372 of 372 strings)

Translated using Weblate (French)

Currently translated at 100.0% (661 of 661 strings)

Co-authored-by: Benoit Hetru <me+hbtc@gahanka.net>
Co-authored-by: Chap <chalda82+nogravatar@gmail.com>
Co-authored-by: Dmitriy Pleshevskiy <dmitriy@ideascup.me>
Co-authored-by: Mara Dolichotis <marascherzer@gmail.com>
Co-authored-by: Sciuridae <sweetvshoney@163.com>
Co-authored-by: Võ Trần Nhã Linh <vtrnnhlinh@outlook.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: mattya 226 <worldworld1114@gmail.com>
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/de/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/it/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/content/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/it/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/vi/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/de/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/fr/
Translation: Habitica/Backgrounds
Translation: Habitica/Communityguidelines
Translation: Habitica/Content
Translation: Habitica/Gear
Translation: Habitica/Questscontent
Translation: Habitica/Settings
Translation: Habitica/Subscriber
2021-12-08 16:59:54 +01:00
Vanathi G a193bd4b7a Fix show more button behaviour in Stable (#13655) 2021-12-07 15:42:09 -06:00
SabreCat d995a7484b Revert "chore(legal): updates to Privacy Policy"
This reverts commit e22eef993b.
2021-12-07 15:37:27 -06:00
Weblate 445f0cc117 Merge branch 'origin/develop' into Weblate. 2021-12-07 18:00:02 +01:00
Weblate 5f3336f3d5 Translated using Weblate (Japanese)
Currently translated at 100.0% (2477 of 2477 strings)

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (129 of 129 strings)

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (13 of 13 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (134 of 134 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (193 of 193 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (193 of 193 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (210 of 210 strings)

Translated using Weblate (Japanese)

Currently translated at 99.9% (2475 of 2477 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (2477 of 2477 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (203 of 203 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (178 of 178 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (56 of 56 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (746 of 746 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (746 of 746 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (746 of 746 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (127 of 127 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (372 of 372 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (98 of 98 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (654 of 654 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (125 of 125 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (186 of 186 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (746 of 746 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (2477 of 2477 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (178 of 178 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (746 of 746 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (186 of 186 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (746 of 746 strings)

Translated using Weblate (Hindi)

Currently translated at 98.9% (184 of 186 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (46 of 46 strings)

Translated using Weblate (Japanese)

Currently translated at 99.7% (2471 of 2477 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 98.7% (737 of 746 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (127 of 127 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (46 of 46 strings)

Translated using Weblate (German)

Currently translated at 100.0% (127 of 127 strings)

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (61 of 61 strings)

Translated using Weblate (Ukrainian)

Currently translated at 88.2% (98 of 111 strings)

Translated using Weblate (Japanese)

Currently translated at 99.5% (2465 of 2477 strings)

Translated using Weblate (Dutch)

Currently translated at 98.7% (646 of 654 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (746 of 746 strings)

Translated using Weblate (Dutch)

Currently translated at 98.3% (643 of 654 strings)

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (46 of 46 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (746 of 746 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (127 of 127 strings)

Translated using Weblate (Turkish)

Currently translated at 88.0% (110 of 125 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (56 of 56 strings)

Translated using Weblate (Russian)

Currently translated at 94.6% (53 of 56 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (372 of 372 strings)

Translated using Weblate (Vietnamese)

Currently translated at 98.3% (60 of 61 strings)

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (8 of 8 strings)

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (372 of 372 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (8 of 8 strings)

Translated using Weblate (Czech)

Currently translated at 96.4% (54 of 56 strings)

Translated using Weblate (Czech)

Currently translated at 93.7% (121 of 129 strings)

Translated using Weblate (Japanese)

Currently translated at 99.4% (2463 of 2477 strings)

Translated using Weblate (German)

Currently translated at 99.1% (2456 of 2477 strings)

Translated using Weblate (German)

Currently translated at 100.0% (746 of 746 strings)

Translated using Weblate (German)

Currently translated at 100.0% (372 of 372 strings)

Translated using Weblate (Japanese)

Currently translated at 99.3% (2461 of 2477 strings)

Translated using Weblate (Japanese)

Currently translated at 99.5% (743 of 746 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (372 of 372 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (654 of 654 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2473 of 2473 strings)

Translated using Weblate (Dutch)

Currently translated at 97.0% (635 of 654 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 99.8% (745 of 746 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (372 of 372 strings)

Translated using Weblate (Vietnamese)

Currently translated at 76.3% (97 of 127 strings)

Translated using Weblate (Hebrew)

Currently translated at 90.2% (121 of 134 strings)

Translated using Weblate (Hebrew)

Currently translated at 61.9% (119 of 192 strings)

Translated using Weblate (Hebrew)

Currently translated at 65.9% (62 of 94 strings)

Translated using Weblate (Hebrew)

Currently translated at 85.2% (52 of 61 strings)

Translated using Weblate (Hebrew)

Currently translated at 50.9% (107 of 210 strings)

Translated using Weblate (Hebrew)

Currently translated at 100.0% (22 of 22 strings)

Translated using Weblate (Hebrew)

Currently translated at 68.7% (1700 of 2473 strings)

Translated using Weblate (Hebrew)

Currently translated at 50.0% (28 of 56 strings)

Translated using Weblate (Hebrew)

Currently translated at 93.3% (14 of 15 strings)

Translated using Weblate (Hebrew)

Currently translated at 76.4% (570 of 746 strings)

Translated using Weblate (Hebrew)

Currently translated at 95.6% (178 of 186 strings)

Translated using Weblate (Hebrew)

Currently translated at 59.2% (74 of 125 strings)

Translated using Weblate (Hebrew)

Currently translated at 89.2% (166 of 186 strings)

Co-authored-by: Arnav Singhal <arnavsinghalyt@gmail.com>
Co-authored-by: Chap <chalda82+nogravatar@gmail.com>
Co-authored-by: Dmitriy Pleshevskiy <dmitriy@ideascup.me>
Co-authored-by: Ele Kho <elena.chochlova@seznam.cz>
Co-authored-by: Jerry Chen <minecjraft@qq.com>
Co-authored-by: John Collins <munmedia9865@gmail.com>
Co-authored-by: KanI <twinklingnerd@gmail.com>
Co-authored-by: Maikel Roelofs <maikel_roelofs@live.nl>
Co-authored-by: Mara Dolichotis <marascherzer@gmail.com>
Co-authored-by: Michael Purkert <Tevollogins123@gmail.com>
Co-authored-by: Nazar Paruna <nazarparuna@gmail.com>
Co-authored-by: Omer I.S <omeritzicschwartz@gmail.com>
Co-authored-by: Otto Spaude <ottospaude2@gmail.com>
Co-authored-by: Raithe <RaitheOfDureya@gmail.com>
Co-authored-by: Sciuridae <sweetvshoney@163.com>
Co-authored-by: Võ Trần Nhã Linh <vtrnnhlinh@outlook.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: mattya 226 <worldworld1114@gmail.com>
Co-authored-by: Естай <akseleu@yahoo.com>
Co-authored-by: そら <comi4work@gmail.com>
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/he/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/it/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/tr/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/it/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/nl/
Translate-URL: https://translate.habitica.com/projects/habitica/challenge/it/
Translate-URL: https://translate.habitica.com/projects/habitica/character/he/
Translate-URL: https://translate.habitica.com/projects/habitica/character/hi/
Translate-URL: https://translate.habitica.com/projects/habitica/character/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/de/
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/it/
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/vi/
Translate-URL: https://translate.habitica.com/projects/habitica/content/de/
Translate-URL: https://translate.habitica.com/projects/habitica/content/it/
Translate-URL: https://translate.habitica.com/projects/habitica/content/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/content/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/content/vi/
Translate-URL: https://translate.habitica.com/projects/habitica/content/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/contrib/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/contrib/vi/
Translate-URL: https://translate.habitica.com/projects/habitica/contrib/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/death/he/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/he/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/it/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/front/it/
Translate-URL: https://translate.habitica.com/projects/habitica/front/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/de/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/he/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/it/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/generic/it/
Translate-URL: https://translate.habitica.com/projects/habitica/inventory/vi/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/he/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/loginincentives/he/
Translate-URL: https://translate.habitica.com/projects/habitica/messages/he/
Translate-URL: https://translate.habitica.com/projects/habitica/messages/vi/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/cs/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/vi/
Translate-URL: https://translate.habitica.com/projects/habitica/overview/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/pets/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/quests/he/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/de/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/he/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/it/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/rebirth/vi/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/he/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/it/
Translate-URL: https://translate.habitica.com/projects/habitica/spells/cs/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/he/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/it/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/he/
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/it/
Translation: Habitica/Achievements
Translation: Habitica/Backgrounds
Translation: Habitica/Challenge
Translation: Habitica/Character
Translation: Habitica/Communityguidelines
Translation: Habitica/Content
Translation: Habitica/Contrib
Translation: Habitica/Death
Translation: Habitica/Faq
Translation: Habitica/Front
Translation: Habitica/Gear
Translation: Habitica/Generic
Translation: Habitica/Inventory
Translation: Habitica/Limited
Translation: Habitica/Loginincentives
Translation: Habitica/Messages
Translation: Habitica/Npc
Translation: Habitica/Overview
Translation: Habitica/Pets
Translation: Habitica/Quests
Translation: Habitica/Questscontent
Translation: Habitica/Rebirth
Translation: Habitica/Settings
Translation: Habitica/Spells
Translation: Habitica/Subscriber
Translation: Habitica/Tasks
2021-12-07 17:59:42 +01:00
SabreCat 1a58e3f8a1 Merge branch 'release' into develop 2021-12-07 10:58:06 -06:00
Natalie L 4c657f43de Update: Dec 2021 Background and Armoire Items (#13667) 2021-12-07 10:45:36 -06:00
Natalie L f752f7a80d Merge pull request #13673 from HabitRPG/dependabot/npm_and_yarn/website/client/smartbanner.js-1.17.0
build(deps): bump smartbanner.js from 1.16.0 to 1.17.0 in /website/client
2021-12-06 12:10:15 -05:00
Natalie L 07c906c557 Merge pull request #13672 from HabitRPG/dependabot/npm_and_yarn/website/client/amplitude-js-8.13.1
build(deps): bump amplitude-js from 8.12.0 to 8.13.1 in /website/client
2021-12-06 12:09:12 -05:00
Natalie L b2f7d994f0 Merge pull request #13669 from HabitRPG/dependabot/npm_and_yarn/website/client/core-js-3.19.2
build(deps): bump core-js from 3.19.1 to 3.19.2 in /website/client
2021-12-06 12:04:07 -05:00
Natalie L a814fe8581 Merge pull request #13668 from HabitRPG/dependabot/npm_and_yarn/rate-limiter-flexible-2.3.6
build(deps): bump rate-limiter-flexible from 2.3.5 to 2.3.6
2021-12-06 12:03:41 -05:00
dependabot[bot] 2e41576fa2 build(deps): bump smartbanner.js in /website/client
Bumps [smartbanner.js](https://github.com/ain/smartbanner.js) from 1.16.0 to 1.17.0.
- [Release notes](https://github.com/ain/smartbanner.js/releases)
- [Commits](https://github.com/ain/smartbanner.js/compare/v1.16.0...v1.17.0)

---
updated-dependencies:
- dependency-name: smartbanner.js
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-12-06 05:10:00 +00:00
dependabot[bot] f7db8fc721 build(deps): bump amplitude-js from 8.12.0 to 8.13.1 in /website/client
Bumps [amplitude-js](https://github.com/amplitude/amplitude-javascript) from 8.12.0 to 8.13.1.
- [Release notes](https://github.com/amplitude/amplitude-javascript/releases)
- [Changelog](https://github.com/amplitude/Amplitude-JavaScript/blob/main/CHANGELOG.md)
- [Commits](https://github.com/amplitude/amplitude-javascript/compare/v8.12.0...v8.13.1)

---
updated-dependencies:
- dependency-name: amplitude-js
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-12-06 05:07:56 +00:00
dependabot[bot] 75b6d6e11a build(deps): bump core-js from 3.19.1 to 3.19.2 in /website/client
Bumps [core-js](https://github.com/zloirock/core-js) from 3.19.1 to 3.19.2.
- [Release notes](https://github.com/zloirock/core-js/releases)
- [Changelog](https://github.com/zloirock/core-js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zloirock/core-js/compare/v3.19.1...v3.19.2)

---
updated-dependencies:
- dependency-name: core-js
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-12-06 05:03:41 +00:00
dependabot[bot] a294b404ac build(deps): bump rate-limiter-flexible from 2.3.5 to 2.3.6
Bumps [rate-limiter-flexible](https://github.com/animir/node-rate-limiter-flexible) from 2.3.5 to 2.3.6.
- [Release notes](https://github.com/animir/node-rate-limiter-flexible/releases)
- [Commits](https://github.com/animir/node-rate-limiter-flexible/commits)

---
updated-dependencies:
- dependency-name: rate-limiter-flexible
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-12-06 05:03:02 +00:00
9713 changed files with 11207 additions and 10285 deletions
+1
View File
@@ -1,5 +1,6 @@
.DS_Store
website/build
website/raw_sprites/spritesmith
website/transpiled-babel/
website/common/transpiled-babel/
node_modules
+2 -2
View File
@@ -131,8 +131,8 @@ gulp.task('sprites:clean', done => {
clean(`${IMG_DIST_PATH}spritesmith*,${CSS_DIST_PATH}spritesmith*}`, done);
});
gulp.task('sprites:checkCompiledDimensions', gulp.series('sprites:main', 'sprites:largeSprites', done => {
console.log('Verifiying that images do not exceed max dimensions'); // eslint-disable-line no-console
gulp.task('sprites:checkCompiledDimensions', gulp.series('sprites:main', done => {
console.log('Verifying that images do not exceed max dimensions'); // eslint-disable-line no-console
let numberOfSheetsThatAreTooBig = 0;
+248 -144
View File
@@ -1,6 +1,6 @@
{
"name": "habitica",
"version": "4.214.0",
"version": "4.215.1",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -13,9 +13,9 @@
}
},
"@babel/compat-data": {
"version": "7.16.0",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.0.tgz",
"integrity": "sha512-DGjt2QZse5SGd9nfOSqO4WLJ8NN/oHkijbXbPrxuoJO3oIPJL3TciZs9FX+cOHNiY9E9l0opL8g7BmLe3T+9ew=="
"version": "7.16.4",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz",
"integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q=="
},
"@babel/core": {
"version": "7.16.0",
@@ -265,16 +265,33 @@
}
},
"@babel/helper-compilation-targets": {
"version": "7.16.0",
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.0.tgz",
"integrity": "sha512-S7iaOT1SYlqK0sQaCi21RX4+13hmdmnxIEAnQUB/eh7GeAnRjOUgTYpLkUOiRXzD+yog1JxP0qyAQZ7ZxVxLVg==",
"version": "7.16.3",
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz",
"integrity": "sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==",
"requires": {
"@babel/compat-data": "^7.16.0",
"@babel/helper-validator-option": "^7.14.5",
"browserslist": "^4.16.6",
"browserslist": "^4.17.5",
"semver": "^6.3.0"
},
"dependencies": {
"browserslist": {
"version": "4.18.1",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz",
"integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==",
"requires": {
"caniuse-lite": "^1.0.30001280",
"electron-to-chromium": "^1.3.896",
"escalade": "^3.1.1",
"node-releases": "^2.0.1",
"picocolors": "^1.0.0"
}
},
"caniuse-lite": {
"version": "1.0.30001282",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001282.tgz",
"integrity": "sha512-YhF/hG6nqBEllymSIjLtR2iWDDnChvhnVJqp+vloyt2tEHFG1yBR+ac2B/rOw0qOK0m0lEXU2dv4E/sMk5P9Kg=="
},
"semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
@@ -305,9 +322,9 @@
}
},
"@babel/helper-define-polyfill-provider": {
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.4.tgz",
"integrity": "sha512-OrpPZ97s+aPi6h2n1OXzdhVis1SGSsMU2aMHgLcOKfsp4/v1NWpx3CWT3lBj5eeBq9cDkPkh+YCfdF7O12uNDQ==",
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.0.tgz",
"integrity": "sha512-7hfT8lUljl/tM3h+izTX/pO3W3frz2ok6Pk+gzys8iJqDfZrZy2pXjRTZAvG2YmfHun1X4q8/UZRLatMfqc5Tg==",
"requires": {
"@babel/helper-compilation-targets": "^7.13.0",
"@babel/helper-module-imports": "^7.12.13",
@@ -412,9 +429,9 @@
"integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ=="
},
"@babel/helper-remap-async-to-generator": {
"version": "7.16.0",
"resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.0.tgz",
"integrity": "sha512-MLM1IOMe9aQBqMWxcRw8dcb9jlM86NIw7KA0Wri91Xkfied+dE0QuBFSBjMNvqzmS0OSIDsMNC24dBEkPUi7ew==",
"version": "7.16.4",
"resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.4.tgz",
"integrity": "sha512-vGERmmhR+s7eH5Y/cp8PCVzj4XEjerq8jooMfxFdA5xVtAk9Sh4AQsrWgiErUEBjtGrBtOFKDUcWQFW4/dFwMA==",
"requires": {
"@babel/helper-annotate-as-pure": "^7.16.0",
"@babel/helper-wrap-function": "^7.16.0",
@@ -629,9 +646,9 @@
}
},
"@babel/parser": {
"version": "7.16.2",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.2.tgz",
"integrity": "sha512-RUVpT0G2h6rOZwqLDTrKk7ksNv7YpAilTnYe1/Q+eDjxEceRMKVWbCsX7t8h6C1qCFi/1Y8WZjcEPBAFG27GPw=="
"version": "7.16.4",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.4.tgz",
"integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng=="
},
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
"version": "7.16.2",
@@ -652,12 +669,12 @@
}
},
"@babel/plugin-proposal-async-generator-functions": {
"version": "7.16.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.0.tgz",
"integrity": "sha512-nyYmIo7ZqKsY6P4lnVmBlxp9B3a96CscbLotlsNuktMHahkDwoPYEjXrZHU0Tj844Z9f1IthVxQln57mhkcExw==",
"version": "7.16.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.4.tgz",
"integrity": "sha512-/CUekqaAaZCQHleSK/9HajvcD/zdnJiKRiuUFq8ITE+0HsPzquf53cpFiqAwl/UfmJbR6n5uGPQSPdrmKOvHHg==",
"requires": {
"@babel/helper-plugin-utils": "^7.14.5",
"@babel/helper-remap-async-to-generator": "^7.16.0",
"@babel/helper-remap-async-to-generator": "^7.16.4",
"@babel/plugin-syntax-async-generators": "^7.8.4"
}
},
@@ -1104,9 +1121,9 @@
}
},
"@babel/plugin-transform-parameters": {
"version": "7.16.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.0.tgz",
"integrity": "sha512-XgnQEm1CevKROPx+udOi/8f8TiGhrUWiHiaUCIp47tE0tpFDjzXNTZc9E5CmCwxNjXTWEVqvRfWZYOTFvMa/ZQ==",
"version": "7.16.3",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.3.tgz",
"integrity": "sha512-3MaDpJrOXT1MZ/WCmkOFo7EtmVVC8H4EUZVrHvFOsmwkk4lOjQj8rzv8JKUZV4YoQKeoIgk07GO+acPU9IMu/w==",
"requires": {
"@babel/helper-plugin-utils": "^7.14.5"
}
@@ -1194,17 +1211,17 @@
}
},
"@babel/preset-env": {
"version": "7.16.0",
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.0.tgz",
"integrity": "sha512-cdTu/W0IrviamtnZiTfixPfIncr2M1VqRrkjzZWlr1B4TVYimCFK5jkyOdP4qw2MrlKHi+b3ORj6x8GoCew8Dg==",
"version": "7.16.4",
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.4.tgz",
"integrity": "sha512-v0QtNd81v/xKj4gNKeuAerQ/azeNn/G1B1qMLeXOcV8+4TWlD2j3NV1u8q29SDFBXx/NBq5kyEAO+0mpRgacjA==",
"requires": {
"@babel/compat-data": "^7.16.0",
"@babel/helper-compilation-targets": "^7.16.0",
"@babel/compat-data": "^7.16.4",
"@babel/helper-compilation-targets": "^7.16.3",
"@babel/helper-plugin-utils": "^7.14.5",
"@babel/helper-validator-option": "^7.14.5",
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.0",
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.2",
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.0",
"@babel/plugin-proposal-async-generator-functions": "^7.16.0",
"@babel/plugin-proposal-async-generator-functions": "^7.16.4",
"@babel/plugin-proposal-class-properties": "^7.16.0",
"@babel/plugin-proposal-class-static-block": "^7.16.0",
"@babel/plugin-proposal-dynamic-import": "^7.16.0",
@@ -1254,7 +1271,7 @@
"@babel/plugin-transform-named-capturing-groups-regex": "^7.16.0",
"@babel/plugin-transform-new-target": "^7.16.0",
"@babel/plugin-transform-object-super": "^7.16.0",
"@babel/plugin-transform-parameters": "^7.16.0",
"@babel/plugin-transform-parameters": "^7.16.3",
"@babel/plugin-transform-property-literals": "^7.16.0",
"@babel/plugin-transform-regenerator": "^7.16.0",
"@babel/plugin-transform-reserved-words": "^7.16.0",
@@ -1267,10 +1284,10 @@
"@babel/plugin-transform-unicode-regex": "^7.16.0",
"@babel/preset-modules": "^0.1.5",
"@babel/types": "^7.16.0",
"babel-plugin-polyfill-corejs2": "^0.2.3",
"babel-plugin-polyfill-corejs3": "^0.3.0",
"babel-plugin-polyfill-regenerator": "^0.2.3",
"core-js-compat": "^3.19.0",
"babel-plugin-polyfill-corejs2": "^0.3.0",
"babel-plugin-polyfill-corejs3": "^0.4.0",
"babel-plugin-polyfill-regenerator": "^0.3.0",
"core-js-compat": "^3.19.1",
"semver": "^6.3.0"
},
"dependencies": {
@@ -1306,9 +1323,9 @@
}
},
"@babel/runtime": {
"version": "7.16.0",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.0.tgz",
"integrity": "sha512-Nht8L0O8YCktmsDV6FqFue7vQLRx3Hb0B37lS5y0jDRqRxlBG4wIJHnf9/bgSE2UyipKFA01YtS+npRdTWBUyw==",
"version": "7.16.3",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.3.tgz",
"integrity": "sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ==",
"requires": {
"regenerator-runtime": "^0.13.4"
}
@@ -1359,16 +1376,16 @@
}
},
"@babel/traverse": {
"version": "7.16.0",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.0.tgz",
"integrity": "sha512-qQ84jIs1aRQxaGaxSysII9TuDaguZ5yVrEuC0BN2vcPlalwfLovVmCjbFDPECPXcYM/wLvNFfp8uDOliLxIoUQ==",
"version": "7.16.3",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.3.tgz",
"integrity": "sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==",
"requires": {
"@babel/code-frame": "^7.16.0",
"@babel/generator": "^7.16.0",
"@babel/helper-function-name": "^7.16.0",
"@babel/helper-hoist-variables": "^7.16.0",
"@babel/helper-split-export-declaration": "^7.16.0",
"@babel/parser": "^7.16.0",
"@babel/parser": "^7.16.3",
"@babel/types": "^7.16.0",
"debug": "^4.1.0",
"globals": "^11.1.0"
@@ -1441,9 +1458,9 @@
"integrity": "sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA=="
},
"@google-cloud/common": {
"version": "3.7.1",
"resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-3.7.1.tgz",
"integrity": "sha512-BJfcV5BShbunYcn5HniebXLVp2Y6fpuesNegyar5CG8H2AKYHlKxnVID+FSwy92WAW4N2lpGdvxRsmiAn8Fc3w==",
"version": "3.8.1",
"resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-3.8.1.tgz",
"integrity": "sha512-FOs3NFU6bDt5mXE7IFpwIeqzLwRZNu9lJYl+bHVNkwmxX/w4VyDZAiGjQHhpV1Ek+muNKlX8HPchxaIxNTuOhw==",
"requires": {
"@google-cloud/projectify": "^2.0.0",
"@google-cloud/promisify": "^2.0.0",
@@ -1451,25 +1468,25 @@
"duplexify": "^4.1.1",
"ent": "^2.2.0",
"extend": "^3.0.2",
"google-auth-library": "^7.0.2",
"google-auth-library": "^7.9.2",
"retry-request": "^4.2.2",
"teeny-request": "^7.0.0"
}
},
"@google-cloud/projectify": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-2.1.0.tgz",
"integrity": "sha512-qbpidP/fOvQNz3nyabaVnZqcED1NNzf7qfeOlgtAZd9knTwY+KtsGRkYpiQzcATABy4gnGP2lousM3S0nuWVzA=="
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-2.1.1.tgz",
"integrity": "sha512-+rssMZHnlh0twl122gXY4/aCrk0G1acBqkHFfYddtsqpYXGxA29nj9V5V9SfC+GyOG00l650f6lG9KL+EpFEWQ=="
},
"@google-cloud/promisify": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-2.0.3.tgz",
"integrity": "sha512-d4VSA86eL/AFTe5xtyZX+ePUjE8dIFu2T8zmdeNBSa5/kNgXPCx/o/wbFNHAGLJdGnk1vddRuMESD9HbOC8irw=="
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-2.0.4.tgz",
"integrity": "sha512-j8yRSSqswWi1QqUGKVEKOG03Q7qOoZP6/h2zN2YO+F5h2+DHU0bSrHCK9Y7lo2DI9fBd8qGAw795sf+3Jva4yA=="
},
"@google-cloud/trace-agent": {
"version": "5.1.5",
"resolved": "https://registry.npmjs.org/@google-cloud/trace-agent/-/trace-agent-5.1.5.tgz",
"integrity": "sha512-8Mrspg9nebd1VA4xC+XQTBBY3PV3SoUR70CHc3waN9lZskrCQO0Ha50VamhtUx8gUMgUK8ANed5EsF8rv+jY4Q==",
"version": "5.1.6",
"resolved": "https://registry.npmjs.org/@google-cloud/trace-agent/-/trace-agent-5.1.6.tgz",
"integrity": "sha512-TLZwbR9WYx/wNhJv6PcbKEuHZpArUG1WtaPLwjxRJeTVNDV2gOsDVDihbezCyyOcHxU3kXCewB5y2BA1pP0mIg==",
"requires": {
"@google-cloud/common": "^3.0.0",
"@opencensus/propagation-stackdriver": "0.1.0",
@@ -1703,9 +1720,9 @@
}
},
"@tootallnate/once": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
"integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw=="
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
"integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A=="
},
"@types/body-parser": {
"version": "1.19.1",
@@ -2982,12 +2999,12 @@
}
},
"babel-plugin-polyfill-corejs2": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.3.tgz",
"integrity": "sha512-NDZ0auNRzmAfE1oDDPW2JhzIMXUk+FFe2ICejmt5T4ocKgiQx3e0VCRx9NCAidcMtL2RUZaWtXnmjTCkx0tcbA==",
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.0.tgz",
"integrity": "sha512-wMDoBJ6uG4u4PNFh72Ty6t3EgfA91puCuAwKIazbQlci+ENb/UU9A3xG5lutjUIiXCIn1CY5L15r9LimiJyrSA==",
"requires": {
"@babel/compat-data": "^7.13.11",
"@babel/helper-define-polyfill-provider": "^0.2.4",
"@babel/helper-define-polyfill-provider": "^0.3.0",
"semver": "^6.1.1"
},
"dependencies": {
@@ -2999,20 +3016,20 @@
}
},
"babel-plugin-polyfill-corejs3": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.3.0.tgz",
"integrity": "sha512-JLwi9vloVdXLjzACL80j24bG6/T1gYxwowG44dg6HN/7aTPdyPbJJidf6ajoA3RPHHtW0j9KMrSOLpIZpAnPpg==",
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.4.0.tgz",
"integrity": "sha512-YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw==",
"requires": {
"@babel/helper-define-polyfill-provider": "^0.2.4",
"@babel/helper-define-polyfill-provider": "^0.3.0",
"core-js-compat": "^3.18.0"
}
},
"babel-plugin-polyfill-regenerator": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.3.tgz",
"integrity": "sha512-JVE78oRZPKFIeUqFGrSORNzQnrDwZR16oiWeGM8ZyjBn2XAT5OjP+wXx5ESuo33nUsFUEJYjtklnsKbxW5L+7g==",
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.0.tgz",
"integrity": "sha512-dhAPTDLGoMW5/84wkgwiLRwMnio2i1fUe53EuvtKMv0pn2p3S8OCoV1xAzfJPl0KOX7IB89s2ib85vbYiea3jg==",
"requires": {
"@babel/helper-define-polyfill-provider": "^0.2.4"
"@babel/helper-define-polyfill-provider": "^0.3.0"
}
},
"babel-runtime": {
@@ -3641,20 +3658,20 @@
"integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA=="
},
"body-parser": {
"version": "1.19.0",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
"integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
"version": "1.19.1",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz",
"integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==",
"requires": {
"bytes": "3.1.0",
"bytes": "3.1.1",
"content-type": "~1.0.4",
"debug": "2.6.9",
"depd": "~1.1.2",
"http-errors": "1.7.2",
"http-errors": "1.8.1",
"iconv-lite": "0.4.24",
"on-finished": "~2.3.0",
"qs": "6.7.0",
"raw-body": "2.4.0",
"type-is": "~1.6.17"
"qs": "6.9.6",
"raw-body": "2.4.2",
"type-is": "~1.6.18"
},
"dependencies": {
"debug": {
@@ -3665,6 +3682,18 @@
"ms": "2.0.0"
}
},
"http-errors": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
"integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
"requires": {
"depd": "~1.1.2",
"inherits": "2.0.4",
"setprototypeof": "1.2.0",
"statuses": ">= 1.5.0 < 2",
"toidentifier": "1.0.1"
}
},
"iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -3679,9 +3708,19 @@
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
"qs": {
"version": "6.7.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
"integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
"version": "6.9.6",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz",
"integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ=="
},
"setprototypeof": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
},
"toidentifier": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
"integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="
}
}
},
@@ -3869,9 +3908,9 @@
"integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA=="
},
"bytes": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
"integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz",
"integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg=="
},
"cache-base": {
"version": "1.0.1",
@@ -4680,21 +4719,21 @@
},
"dependencies": {
"browserslist": {
"version": "4.17.6",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.6.tgz",
"integrity": "sha512-uPgz3vyRTlEiCv4ee9KlsKgo2V6qPk7Jsn0KAn2OBqbqKo3iNcPEC1Ti6J4dwnz+aIRfEEEuOzC9IBk8tXUomw==",
"version": "4.18.1",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz",
"integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==",
"requires": {
"caniuse-lite": "^1.0.30001274",
"electron-to-chromium": "^1.3.886",
"caniuse-lite": "^1.0.30001280",
"electron-to-chromium": "^1.3.896",
"escalade": "^3.1.1",
"node-releases": "^2.0.1",
"picocolors": "^1.0.0"
}
},
"caniuse-lite": {
"version": "1.0.30001277",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001277.tgz",
"integrity": "sha512-J2WtYj2Pl6LBEG214XmbGw1gzZEsYuinQFPqYtpZDB3/vm49qNlrcbJrTMkHKmdRDdmXYwkG0tgOBJsuI+J12Q=="
"version": "1.0.30001282",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001282.tgz",
"integrity": "sha512-YhF/hG6nqBEllymSIjLtR2iWDDnChvhnVJqp+vloyt2tEHFG1yBR+ac2B/rOw0qOK0m0lEXU2dv4E/sMk5P9Kg=="
},
"semver": {
"version": "7.0.0",
@@ -5450,9 +5489,9 @@
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
},
"electron-to-chromium": {
"version": "1.3.889",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.889.tgz",
"integrity": "sha512-suEUoPTD1mExjL9TdmH7cvEiWJVM2oEiAi+Y1p0QKxI2HcRlT44qDTP2c1aZmVwRemIPYOpxmV7CxQCOWcm4XQ=="
"version": "1.3.905",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.905.tgz",
"integrity": "sha512-jTjkycBMCCMk86PAucHtqicZ6dKlgPw+gAXMI9xxH5ua0+60dH+PVR7efwQMqCOQxmhHSo4aF4f37Idb5XBAcA=="
},
"emitter-listener": {
"version": "1.1.2",
@@ -6407,6 +6446,28 @@
"vary": "~1.1.2"
},
"dependencies": {
"body-parser": {
"version": "1.19.0",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
"integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
"requires": {
"bytes": "3.1.0",
"content-type": "~1.0.4",
"debug": "2.6.9",
"depd": "~1.1.2",
"http-errors": "1.7.2",
"iconv-lite": "0.4.24",
"on-finished": "~2.3.0",
"qs": "6.7.0",
"raw-body": "2.4.0",
"type-is": "~1.6.17"
}
},
"bytes": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
"integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
},
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@@ -6415,6 +6476,14 @@
"ms": "2.0.0"
}
},
"iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
}
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
@@ -6424,13 +6493,24 @@
"version": "6.7.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
"integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
},
"raw-body": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
"integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
"requires": {
"bytes": "3.1.0",
"http-errors": "1.7.2",
"iconv-lite": "0.4.24",
"unpipe": "1.0.0"
}
}
}
},
"express-basic-auth": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/express-basic-auth/-/express-basic-auth-1.2.0.tgz",
"integrity": "sha512-iJ0h1Gk6fZRrFmO7tP9nIbxwNgCUJASfNj5fb0Hy15lGtbqqsxpt7609+wq+0XlByZjXmC/rslWQtnuSTVRIcg==",
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/express-basic-auth/-/express-basic-auth-1.2.1.tgz",
"integrity": "sha512-L6YQ1wQ/mNjVLAmK3AG1RK6VkokA1BIY6wmiH304Xtt/cLTps40EusZsU1Uop+v9lTDPxdtzbFmdXfFO3KEnwA==",
"requires": {
"basic-auth": "^2.0.1"
}
@@ -7121,21 +7201,21 @@
}
},
"gaxios": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.0.tgz",
"integrity": "sha512-pHplNbslpwCLMyII/lHPWFQbJWOX0B3R1hwBEOvzYi1GmdKZruuEHK4N9V6f7tf1EaPYyF80mui1+344p6SmLg==",
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.2.tgz",
"integrity": "sha512-T+ap6GM6UZ0c4E6yb1y/hy2UB6hTrqhglp3XfmU9qbLCGRYhLVV5aRPpC4EmoG8N8zOnkYCgoBz+ScvGAARY6Q==",
"requires": {
"abort-controller": "^3.0.0",
"extend": "^3.0.2",
"https-proxy-agent": "^5.0.0",
"is-stream": "^2.0.0",
"node-fetch": "^2.3.0"
"node-fetch": "^2.6.1"
}
},
"gcp-metadata": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.0.tgz",
"integrity": "sha512-L9XQUpvKJCM76YRSmcxrR4mFPzPGsgZUH+GgHMxAET8qc6+BhRJq63RLhWakgEO2KKVgeSDVfyiNjkGSADwNTA==",
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz",
"integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==",
"requires": {
"gaxios": "^4.0.0",
"json-bigint": "^1.0.0"
@@ -7661,9 +7741,9 @@
}
},
"google-auth-library": {
"version": "7.6.2",
"resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.6.2.tgz",
"integrity": "sha512-yvEnwVsvgH8RXTtpf6e84e7dqIdUEKJhmQvTJwzYP+RDdHjLrDp9sk2u2ZNDJPLKZ7DJicx/+AStcQspJiq+Qw==",
"version": "7.10.2",
"resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.10.2.tgz",
"integrity": "sha512-M37o9Kxa/TLvOLgF71SXvLeVEP5sbSTmKl1zlIgl72SFy5PtsU3pOdu8G8MIHHpQ3/NZabDI8rQkA9DvQVKkPA==",
"requires": {
"arrify": "^2.0.0",
"base64-js": "^1.3.0",
@@ -8243,11 +8323,11 @@
}
},
"http-proxy-agent": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
"integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
"integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
"requires": {
"@tootallnate/once": "1",
"@tootallnate/once": "2",
"agent-base": "6",
"debug": "4"
}
@@ -12074,21 +12154,33 @@
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
},
"rate-limiter-flexible": {
"version": "2.3.5",
"resolved": "https://registry.npmjs.org/rate-limiter-flexible/-/rate-limiter-flexible-2.3.5.tgz",
"integrity": "sha512-66QCGB8h74PklfrwDEFa8oIMHBL31x79WajtGnmS7LwJqdh8u/rnu4a8UNaxguB/YauTWdOI9lAM/WODVZw1FQ=="
"version": "2.3.6",
"resolved": "https://registry.npmjs.org/rate-limiter-flexible/-/rate-limiter-flexible-2.3.6.tgz",
"integrity": "sha512-8DVFOe89rreyut/vzwBI7vgXJynyYoYnH5XogtAKs0F/neAbCTTglXxSJ7fZeZamcFXZDvMidCBvps4KM+1srw=="
},
"raw-body": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
"integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz",
"integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==",
"requires": {
"bytes": "3.1.0",
"http-errors": "1.7.2",
"bytes": "3.1.1",
"http-errors": "1.8.1",
"iconv-lite": "0.4.24",
"unpipe": "1.0.0"
},
"dependencies": {
"http-errors": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
"integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
"requires": {
"depd": "~1.1.2",
"inherits": "2.0.4",
"setprototypeof": "1.2.0",
"statuses": ">= 1.5.0 < 2",
"toidentifier": "1.0.1"
}
},
"iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -12096,6 +12188,16 @@
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
}
},
"setprototypeof": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
},
"toidentifier": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
"integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="
}
}
},
@@ -12974,9 +13076,9 @@
},
"dependencies": {
"object-inspect": {
"version": "1.11.0",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz",
"integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg=="
"version": "1.11.1",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.1.tgz",
"integrity": "sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA=="
}
}
},
@@ -13674,18 +13776,18 @@
}
},
"stripe": {
"version": "8.191.0",
"resolved": "https://registry.npmjs.org/stripe/-/stripe-8.191.0.tgz",
"integrity": "sha512-3oyuIbuW3WDsbGnMUtIZPkr+sOUJ3NEtEwghd81ZuWc+Tq09MrgWXGekbVnbxA3TMFwfKOILw6QoiPA7za4JUg==",
"version": "8.193.0",
"resolved": "https://registry.npmjs.org/stripe/-/stripe-8.193.0.tgz",
"integrity": "sha512-SkU97dWTIcBR3fXdiVZJQoUs1K62ADf4zc6DaCxDACJICPfYI78NIJoroDZBvOLI5vCSHBc4E3wYC+h8CISeBw==",
"requires": {
"@types/node": ">=8.1.0",
"qs": "^6.6.0"
},
"dependencies": {
"qs": {
"version": "6.10.1",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz",
"integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==",
"version": "6.10.2",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.10.2.tgz",
"integrity": "sha512-mSIdjzqznWgfd4pMii7sHtaYF8rx8861hBO80SraY5GT0XQibWZWJSid0avzHGkDIZLImux2S5mXO0Hfct2QCw==",
"requires": {
"side-channel": "^1.0.4"
}
@@ -13915,11 +14017,11 @@
}
},
"teeny-request": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-7.1.1.tgz",
"integrity": "sha512-iwY6rkW5DDGq8hE2YgNQlKbptYpY5Nn2xecjQiNjOXWbKzPGUfmeUBCSQbbr306d7Z7U2N0TPl+/SwYRfua1Dg==",
"version": "7.1.3",
"resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-7.1.3.tgz",
"integrity": "sha512-Ew3aoFzgQEatLA5OBIjdr1DWJUaC1xardG+qbPPo5k/y/3fMwXLxpjh5UB5dVfElktLaQbbMs80chkz53ByvSg==",
"requires": {
"http-proxy-agent": "^4.0.0",
"http-proxy-agent": "^5.0.0",
"https-proxy-agent": "^5.0.0",
"node-fetch": "^2.6.1",
"stream-events": "^1.0.5",
@@ -14554,19 +14656,21 @@
}
},
"universal-analytics": {
"version": "0.4.23",
"resolved": "https://registry.npmjs.org/universal-analytics/-/universal-analytics-0.4.23.tgz",
"integrity": "sha512-lgMIH7XBI6OgYn1woDEmxhGdj8yDefMKg7GkWdeATAlQZFrMrNyxSkpDzY57iY0/6fdlzTbBV03OawvvzG+q7A==",
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/universal-analytics/-/universal-analytics-0.5.2.tgz",
"integrity": "sha512-wNlkW0hQKBJ4UDg3umv/9HZ6tPmzuorxQNmzFD5oiHKz37ddBmV6OpA4aYreyOmKBTzA3DEoTZjwCemw7yc1Og==",
"requires": {
"debug": "^4.1.1",
"request": "^2.88.2",
"uuid": "^3.0.0"
"debug": "^4.3.1",
"uuid": "^8.0.0"
},
"dependencies": {
"uuid": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
"integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
"debug": {
"version": "4.3.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
"integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
"requires": {
"ms": "2.1.2"
}
}
}
},
+8 -8
View File
@@ -1,13 +1,13 @@
{
"name": "habitica",
"description": "A habit tracker app which treats your goals like a Role Playing Game.",
"version": "4.214.0",
"version": "4.215.1",
"main": "./website/server/index.js",
"dependencies": {
"@babel/core": "^7.16.0",
"@babel/preset-env": "^7.16.0",
"@babel/preset-env": "^7.16.4",
"@babel/register": "^7.16.0",
"@google-cloud/trace-agent": "^5.1.5",
"@google-cloud/trace-agent": "^5.1.6",
"@parse/node-apn": "^5.1.0",
"@slack/webhook": "^6.0.0",
"accepts": "^1.3.5",
@@ -16,7 +16,7 @@
"apidoc": "^0.50.2",
"apple-auth": "^1.0.7",
"bcrypt": "^5.0.1",
"body-parser": "^1.18.3",
"body-parser": "^1.19.1",
"bootstrap": "^4.6.0",
"compression": "^1.7.4",
"cookie-session": "^1.4.0",
@@ -28,7 +28,7 @@
"eslint-config-habitrpg": "^6.2.0",
"eslint-plugin-mocha": "^5.0.0",
"express": "^4.16.3",
"express-basic-auth": "^1.1.5",
"express-basic-auth": "^1.2.1",
"express-validator": "^5.2.0",
"glob": "^7.2.0",
"got": "^11.8.3",
@@ -61,15 +61,15 @@
"paypal-rest-sdk": "^1.8.1",
"pp-ipn": "^1.1.0",
"ps-tree": "^1.0.0",
"rate-limiter-flexible": "^2.3.5",
"rate-limiter-flexible": "^2.3.6",
"redis": "^3.1.2",
"regenerator-runtime": "^0.13.9",
"remove-markdown": "^0.3.0",
"rimraf": "^3.0.2",
"short-uuid": "^4.2.0",
"stripe": "^8.191.0",
"stripe": "^8.193.0",
"superagent": "^6.1.0",
"universal-analytics": "^0.4.23",
"universal-analytics": "^0.5.2",
"useragent": "^2.1.9",
"uuid": "^8.3.2",
"validator": "^13.7.0",
+57
View File
@@ -0,0 +1,57 @@
/* eslint-disable global-require */
import nconf from 'nconf';
import { generateUser } from '../../../helpers/api-unit.helper';
import * as emailLib from '../../../../website/server/libs/email';
import { bugReportLogic } from '../../../../website/server/libs/bug-report';
describe('bug-report', () => {
beforeEach(() => {
sandbox.stub(emailLib, 'sendTxn').returns(Promise.resolve());
const nconfGetStub = sandbox.stub(nconf, 'get');
nconfGetStub.withArgs('ADMIN_EMAIL').returns('true');
});
afterEach(() => {
sandbox.restore();
});
it('sends a mail using sendTxn', async () => {
const userId = '2b58daeb-bc50-4a83-b5d3-4ac52c7c0608';
const userMail = 'me@me.com';
const userMessage = 'The power is over 9000, please fix it';
const userAgent = 'The UserAgent with a bunch of weird browser engine levels';
const user = generateUser({
_id: userId,
});
const result = await bugReportLogic(
user, userMail, userMessage, userAgent,
);
expect(emailLib.sendTxn).to.be.called;
expect(result).to.deep.equal({
sendMailResult: undefined,
emailData: {
BROWSER_UA: userAgent,
REPORT_MSG: userMessage,
USER_CLASS: 'warrior',
USER_CONSECUTIVE_MONTHS: 0,
USER_COSTUME: 'false',
USER_CUSTOMER_ID: undefined,
USER_CUSTOM_DAY: 0,
USER_DAILIES_PAUSED: 'false',
USER_EMAIL: userMail,
USER_HOURGLASSES: 0,
USER_ID: userId,
USER_LEVEL: 1,
USER_OFFSET_MONTHS: 0,
USER_PAYMENT_PLATFORM: undefined,
USER_SUBSCRIPTION: undefined,
USER_TIMEZONE_OFFSET: 0,
USER_USERNAME: undefined,
},
});
});
});
+73 -18
View File
@@ -148,9 +148,18 @@ describe('emails', () => {
});
});
describe('sendTxnEmail', () => {
describe('sendTxn', () => {
let sendTxn = null;
beforeEach(() => {
sandbox.stub(got, 'post').returns(defer().promise);
const nconfGetStub = sandbox.stub(nconf, 'get');
nconfGetStub.withArgs('IS_PROD').returns(true);
nconfGetStub.withArgs('BASE_URL').returns('BASE_URL');
const attachEmail = requireAgain(pathToEmailLib);
sendTxn = attachEmail.sendTxn;
});
afterEach(() => {
@@ -158,16 +167,14 @@ describe('emails', () => {
});
it('can send a txn email to one recipient', () => {
sandbox.stub(nconf, 'get').withArgs('IS_PROD').returns(true);
const attachEmail = requireAgain(pathToEmailLib);
const sendTxnEmail = attachEmail.sendTxn;
const emailType = 'an email type';
const mailingInfo = {
name: 'my name',
email: 'my@email',
};
sendTxnEmail(mailingInfo, emailType);
sendTxn(mailingInfo, emailType);
expect(got.post).to.be.called;
expect(got.post).to.be.calledWith('undefined/job', sinon.match({
json: {
data: {
@@ -179,27 +186,77 @@ describe('emails', () => {
});
it('does not send email if address is missing', () => {
sandbox.stub(nconf, 'get').withArgs('IS_PROD').returns(true);
const attachEmail = requireAgain(pathToEmailLib);
const sendTxnEmail = attachEmail.sendTxn;
const emailType = 'an email type';
const mailingInfo = {
name: 'my name',
// email: 'my@email',
};
sendTxnEmail(mailingInfo, emailType);
sendTxn(mailingInfo, emailType);
expect(got.post).not.to.be.called;
});
it('throws error when mail target is only a string', () => {
const emailType = 'an email type';
const mailingInfo = 'my email';
expect(sendTxn(mailingInfo, emailType)).to.throw;
});
it('throws error when mail target has no _id or email', () => {
const emailType = 'an email type';
const mailingInfo = {
};
expect(sendTxn(mailingInfo, emailType)).to.throw;
});
it('throws error when variables not an array', () => {
const emailType = 'an email type';
const mailingInfo = {
name: 'my name',
email: 'my@email',
};
const variables = {};
expect(sendTxn(mailingInfo, emailType, variables)).to.throw;
});
it('throws error when variables array not contain name/content', () => {
const emailType = 'an email type';
const mailingInfo = {
name: 'my name',
email: 'my@email',
};
const variables = [
{
},
];
expect(sendTxn(mailingInfo, emailType, variables)).to.throw;
});
it('throws no error when variables array contain name but no content', () => {
const emailType = 'an email type';
const mailingInfo = {
name: 'my name',
email: 'my@email',
};
const variables = [
{
name: 'MY_VAR',
},
];
expect(sendTxn(mailingInfo, emailType, variables)).to.not.throw;
});
it('uses getUserInfo in case of user data', () => {
sandbox.stub(nconf, 'get').withArgs('IS_PROD').returns(true);
const attachEmail = requireAgain(pathToEmailLib);
const sendTxnEmail = attachEmail.sendTxn;
const emailType = 'an email type';
const mailingInfo = getUser();
sendTxnEmail(mailingInfo, emailType);
sendTxn(mailingInfo, emailType);
expect(got.post).to.be.called;
expect(got.post).to.be.calledWith('undefined/job', sinon.match({
json: {
data: {
@@ -211,17 +268,15 @@ describe('emails', () => {
});
it('sends email with some default variables', () => {
sandbox.stub(nconf, 'get').withArgs('IS_PROD').returns(true);
const attachEmail = requireAgain(pathToEmailLib);
const sendTxnEmail = attachEmail.sendTxn;
const emailType = 'an email type';
const mailingInfo = {
name: 'my name',
email: 'my@email',
};
const variables = [1, 2, 3];
const variables = [];
sendTxnEmail(mailingInfo, emailType, variables);
sendTxn(mailingInfo, emailType, variables);
expect(got.post).to.be.called;
expect(got.post).to.be.calledWith('undefined/job', sinon.match({
json: {
data: {
+5 -5
View File
@@ -247,11 +247,11 @@ describe('payments/index', () => {
context('No Active Promotion', () => {
beforeEach(() => {
sinon.stub(worldState, 'getCurrentEvent').returns(null);
sinon.stub(worldState, 'getCurrentEventList').returns([]);
});
afterEach(() => {
worldState.getCurrentEvent.restore();
worldState.getCurrentEventList.restore();
});
it('sends a private message about the gift', async () => {
@@ -268,14 +268,14 @@ describe('payments/index', () => {
context('Active Promotion', () => {
beforeEach(() => {
sinon.stub(worldState, 'getCurrentEvent').returns({
sinon.stub(worldState, 'getCurrentEventList').returns([{
...common.content.events.winter2021Promo,
event: 'winter2021',
});
}]);
});
afterEach(() => {
worldState.getCurrentEvent.restore();
worldState.getCurrentEventList.restore();
});
it('creates a gift subscription for purchaser and recipient if none exist', async () => {
@@ -74,7 +74,6 @@ describe('PUT /challenges/:challengeId', () => {
expect(res.memberCount).to.equal(2);
expect(res.tasksOrder).not.to.equal('new order');
expect(res.official).to.equal(false);
expect(res.shortName).not.to.equal('new short name');
expect(res.leader).to.eql({
_id: user._id,
+49
View File
@@ -0,0 +1,49 @@
import {
generateUser,
} from '../../helpers/api-integration/v4';
describe('POST /bug-report', () => {
let user;
beforeEach(async () => {
user = await generateUser();
});
it('returns an error when message is not added', async () => {
await expect(user.post('/bug-report', {
message: '',
}))
.to.eventually.be.rejected.and.to.eql({
code: 400,
error: 'BadRequest',
// seems it is not possible to get the real error message
message: 'Invalid request parameters.',
});
});
it('returns an error when email is not added', async () => {
await expect(user.post('/bug-report', {
message: 'message',
email: '',
}))
.to.eventually.be.rejected.and.to.eql({
code: 400,
error: 'BadRequest',
// seems it is not possible to get the real error message
message: 'Invalid request parameters.',
});
});
it('returns an error when email is not valid', async () => {
await expect(user.post('/bug-report', {
message: 'message',
email: 'notamail',
}))
.to.eventually.be.rejected.and.to.eql({
code: 400,
error: 'BadRequest',
// seems it is not possible to get the real error message
message: 'Invalid request parameters.',
});
});
});
+12
View File
@@ -40,6 +40,18 @@ store.state.user.data = {
preferences: {
},
auth: {
local: {
// email: 'example@example.com',
},
facebook: {
emails: [
{
value: 'test@test.de',
},
],
},
},
};
Vue.prototype.$store = store;
+563 -325
View File
File diff suppressed because it is too large Load Diff
+6 -6
View File
@@ -13,10 +13,10 @@
"storybook:serve": "vue-cli-service storybook:serve -p 6006 -c config/storybook"
},
"dependencies": {
"@storybook/addons": "6.3.12",
"@storybook/addon-actions": "6.3.12",
"@storybook/addons": "6.4.9",
"@storybook/addon-actions": "6.4.9",
"@storybook/addon-knobs": "6.2.9",
"@storybook/addon-links": "6.3.12",
"@storybook/addon-links": "6.4.9",
"@storybook/addon-notes": "5.3.21",
"@storybook/vue": "6.3.12",
"@vue/cli-plugin-babel": "^4.5.15",
@@ -25,14 +25,14 @@
"@vue/cli-plugin-unit-mocha": "^4.5.15",
"@vue/cli-service": "^4.5.15",
"@vue/test-utils": "1.0.0-beta.29",
"amplitude-js": "^8.12.0",
"amplitude-js": "^8.13.1",
"axios": "^0.24.0",
"axios-progress-bar": "^1.2.0",
"babel-eslint": "^10.1.0",
"bootstrap": "^4.6.0",
"bootstrap-vue": "^2.21.2",
"chai": "^4.3.4",
"core-js": "^3.19.1",
"core-js": "^3.19.3",
"eslint": "^6.8.0",
"eslint-config-habitrpg": "^6.2.0",
"eslint-plugin-mocha": "^5.3.0",
@@ -47,7 +47,7 @@
"nconf": "^0.11.3",
"sass": "^1.34.0",
"sass-loader": "^8.0.2",
"smartbanner.js": "^1.16.0",
"smartbanner.js": "^1.17.0",
"svg-inline-loader": "^0.8.2",
"svg-url-loader": "^7.1.1",
"svgo": "^1.3.2",
+8
View File
@@ -33,6 +33,8 @@
<payments-success-modal />
<sub-cancel-modal-confirm v-if="isUserLoaded" />
<sub-canceled-modal v-if="isUserLoaded" />
<bug-report-modal v-if="isUserLoaded" />
<bug-report-success-modal v-if="isUserLoaded" />
<snackbars />
<router-view v-if="!isUserLoggedIn || isStaticPage" />
<template v-else>
@@ -177,6 +179,10 @@ import {
removeLocalSetting,
} from '@/libs/userlocalManager';
const bugReportModal = () => import(/* webpackChunkName: "bug-report-modal" */'@/components/bugReportModal');
const bugReportSuccessModal = () => import(/* webpackChunkName: "bug-report-success-modal" */'@/components/bugReportSuccessModal');
const COMMUNITY_MANAGER_EMAIL = process.env.EMAILS_COMMUNITY_MANAGER_EMAIL; // eslint-disable-line
export default {
@@ -196,6 +202,8 @@ export default {
paymentsSuccessModal,
subCancelModalConfirm,
subCanceledModal,
bugReportModal,
bugReportSuccessModal,
},
mixins: [notifications, spellsMixin],
data () {
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -1,126 +1,168 @@
.quest_bunny {
.quest_atom3 {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: 0px -1546px;
width: 210px;
height: 186px;
background-position: -211px -1543px;
width: 216px;
height: 180px;
}
.quest_butterfly {
.quest_axolotl {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -220px 0px;
width: 219px;
height: 219px;
}
.quest_cheetah {
.quest_badger {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -440px 0px;
width: 219px;
height: 219px;
}
.quest_cow {
.quest_basilist {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -1760px 0px;
width: 174px;
height: 213px;
background-position: -1544px -1332px;
width: 189px;
height: 141px;
}
.quest_dilatory {
.quest_beetle {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -220px -232px;
width: 219px;
height: 219px;
background-position: -211px -1332px;
width: 204px;
height: 201px;
}
.quest_dilatoryDistress1 {
.quest_blackPearl {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -222px -1332px;
width: 210px;
height: 210px;
background-position: -1540px -214px;
width: 216px;
height: 216px;
}
.quest_dilatoryDistress2 {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -1760px -422px;
width: 150px;
height: 150px;
}
.quest_dilatoryDistress3 {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -440px -232px;
width: 219px;
height: 219px;
}
.quest_dilatory_derby {
.quest_bronze {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: 0px -232px;
width: 219px;
height: 219px;
}
.quest_dolphin {
.quest_bunny {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -660px 0px;
background-position: 0px -1543px;
width: 210px;
height: 186px;
}
.quest_butterfly {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -220px -232px;
width: 219px;
height: 219px;
}
.quest_dustbunnies {
.quest_cheetah {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -440px -232px;
width: 219px;
height: 219px;
}
.quest_cow {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -1762px 0px;
width: 174px;
height: 213px;
}
.quest_dilatory {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -660px -220px;
width: 219px;
height: 219px;
}
.quest_egg {
.quest_dilatoryDistress1 {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -1760px -214px;
width: 165px;
height: 207px;
background-position: 0px -1332px;
width: 210px;
height: 210px;
}
.quest_evilsanta {
.quest_dilatoryDistress2 {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -1760px -724px;
width: 118px;
height: 131px;
background-position: -1762px -422px;
width: 150px;
height: 150px;
}
.quest_evilsanta2 {
.quest_dilatoryDistress3 {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: 0px -452px;
width: 219px;
height: 219px;
}
.quest_falcon {
.quest_dilatory_derby {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -660px 0px;
width: 219px;
height: 219px;
}
.quest_dolphin {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -220px -452px;
width: 219px;
height: 219px;
}
.quest_ferret {
.quest_dustbunnies {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -440px -452px;
width: 219px;
height: 219px;
}
.quest_fluorite {
.quest_egg {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -1762px -214px;
width: 165px;
height: 207px;
}
.quest_evilsanta {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -1762px -724px;
width: 118px;
height: 131px;
}
.quest_evilsanta2 {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -660px -452px;
width: 219px;
height: 219px;
}
.quest_frog {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: 0px -1332px;
width: 221px;
height: 213px;
}
.quest_ghost_stag {
.quest_falcon {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -880px 0px;
width: 219px;
height: 219px;
}
.quest_goldenknight1 {
.quest_ferret {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -880px -220px;
width: 219px;
height: 219px;
}
.quest_fluorite {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -880px -440px;
width: 219px;
height: 219px;
}
.quest_frog {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -1540px 0px;
width: 221px;
height: 213px;
}
.quest_ghost_stag {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: 0px -672px;
width: 219px;
height: 219px;
}
.quest_goldenknight1 {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -220px -672px;
width: 219px;
height: 219px;
}
.quest_goldenknight2 {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -211px -1546px;
background-position: -1293px -1332px;
width: 250px;
height: 150px;
}
@@ -132,259 +174,217 @@
}
.quest_gryphon {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -876px -1332px;
background-position: -859px -1332px;
width: 216px;
height: 177px;
}
.quest_guineapig {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -880px -440px;
background-position: -440px -672px;
width: 219px;
height: 219px;
}
.quest_harpy {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: 0px -672px;
background-position: -660px -672px;
width: 219px;
height: 219px;
}
.quest_hedgehog {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -433px -1332px;
background-position: -416px -1332px;
width: 219px;
height: 186px;
}
.quest_hippo {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -220px -672px;
background-position: -880px -672px;
width: 219px;
height: 219px;
}
.quest_horse {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -440px -672px;
background-position: -1100px 0px;
width: 219px;
height: 219px;
}
.quest_kangaroo {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -660px -672px;
background-position: -1100px -220px;
width: 219px;
height: 219px;
}
.quest_kraken {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -1093px -1332px;
background-position: -1076px -1332px;
width: 216px;
height: 177px;
}
.quest_lostMasterclasser1 {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -880px -672px;
background-position: -1100px -440px;
width: 219px;
height: 219px;
}
.quest_lostMasterclasser2 {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -1100px 0px;
background-position: -1100px -660px;
width: 219px;
height: 219px;
}
.quest_lostMasterclasser3 {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -1100px -220px;
background-position: 0px -892px;
width: 219px;
height: 219px;
}
.quest_mayhemMistiflying1 {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -1760px -573px;
background-position: -1762px -573px;
width: 150px;
height: 150px;
}
.quest_mayhemMistiflying2 {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -1100px -440px;
background-position: -220px -892px;
width: 219px;
height: 219px;
}
.quest_mayhemMistiflying3 {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -1100px -660px;
background-position: -440px -892px;
width: 219px;
height: 219px;
}
.quest_monkey {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: 0px -892px;
background-position: -660px -892px;
width: 219px;
height: 219px;
}
.quest_moon1 {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -1540px -220px;
background-position: -1540px -431px;
width: 216px;
height: 216px;
}
.quest_moon2 {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -220px -892px;
background-position: -880px -892px;
width: 219px;
height: 219px;
}
.quest_moon3 {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -440px -892px;
background-position: -1100px -892px;
width: 219px;
height: 219px;
}
.quest_moonstone1 {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -660px -892px;
background-position: -1320px 0px;
width: 219px;
height: 219px;
}
.quest_moonstone2 {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -880px -892px;
background-position: -1320px -220px;
width: 219px;
height: 219px;
}
.quest_moonstone3 {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -1100px -892px;
background-position: -1320px -440px;
width: 219px;
height: 219px;
}
.quest_nudibranch {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -1540px -437px;
background-position: -1540px -648px;
width: 216px;
height: 216px;
}
.quest_octopus {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -653px -1332px;
background-position: -636px -1332px;
width: 222px;
height: 177px;
}
.quest_onyx {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -1320px 0px;
background-position: -1320px -660px;
width: 219px;
height: 219px;
}
.quest_owl {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -1320px -220px;
background-position: -1320px -880px;
width: 219px;
height: 219px;
}
.quest_peacock {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -1540px -654px;
background-position: -1540px -865px;
width: 216px;
height: 216px;
}
.quest_penguin {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: 0px -1733px;
background-position: 0px -1730px;
width: 190px;
height: 183px;
}
.quest_pterodactyl {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -1320px -440px;
background-position: 0px -1112px;
width: 219px;
height: 219px;
}
.quest_rat {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -1320px -660px;
background-position: -220px -1112px;
width: 219px;
height: 219px;
}
.quest_robot {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -1320px -880px;
background-position: -440px -1112px;
width: 219px;
height: 219px;
}
.quest_rock {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -1540px -871px;
background-position: -1540px -1082px;
width: 216px;
height: 216px;
}
.quest_rooster {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -1527px -1332px;
background-position: -428px -1543px;
width: 213px;
height: 174px;
}
.quest_ruby {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: 0px -1112px;
background-position: -660px -1112px;
width: 219px;
height: 219px;
}
.quest_sabretooth {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -220px -1112px;
background-position: -880px -1112px;
width: 219px;
height: 219px;
}
.quest_seaserpent {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -440px -1112px;
background-position: -1100px -1112px;
width: 219px;
height: 219px;
}
.quest_sheep {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -660px -1112px;
width: 219px;
height: 219px;
}
.quest_silver {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -880px -1112px;
width: 219px;
height: 219px;
}
.quest_slime {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -1100px -1112px;
width: 219px;
height: 219px;
}
.quest_sloth {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -1320px -1112px;
width: 219px;
height: 219px;
}
.quest_snail {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -1540px -1088px;
width: 219px;
height: 213px;
}
.quest_snake {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -1310px -1332px;
width: 216px;
height: 177px;
}
.quest_spider {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -462px -1546px;
width: 250px;
height: 150px;
}
.quest_squirrel {
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
background-position: -1540px 0px;
width: 219px;
height: 219px;
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 KiB

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 180 KiB

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 414 KiB

After

Width:  |  Height:  |  Size: 381 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 265 KiB

After

Width:  |  Height:  |  Size: 311 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 157 KiB

After

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 169 KiB

After

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 141 KiB

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 KiB

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 156 KiB

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 179 KiB

After

Width:  |  Height:  |  Size: 182 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 148 KiB

After

Width:  |  Height:  |  Size: 143 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 151 KiB

After

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 147 KiB

After

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 158 KiB

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 157 KiB

After

Width:  |  Height:  |  Size: 151 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 183 KiB

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 172 KiB

After

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 168 KiB

After

Width:  |  Height:  |  Size: 163 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 126 KiB

After

Width:  |  Height:  |  Size: 146 KiB

@@ -0,0 +1,6 @@
<svg width="64" height="64" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<g fill="none" fill-rule="evenodd">
<circle fill="#1CA372" cx="32" cy="32" r="32"/>
<path d="M27.277 46a3.34 3.34 0 0 1-2.367-.98L14 34.11l4.733-4.733 8.356 8.356L43.999 18l5.084 4.354L29.82 44.832a3.366 3.366 0 0 1-2.415 1.165c-.043.003-.086.003-.128.003" fill="#FFF"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 391 B

+10 -2
View File
@@ -82,9 +82,17 @@
{{ $t('hall') }}
</router-link>
</li>
<li>
<li v-if="user">
<a
:href="bugReportMailto"
@click.prevent="openBugReportModal()"
target="_blank"
>
{{ $t('reportBug') }}
</a>
</li>
<li v-else>
<a
href="mailto:admin@habitica.com?subject=Habitica Web Bug Report"
target="_blank"
>
{{ $t('reportBug') }}
@@ -0,0 +1,43 @@
/* eslint-disable import/no-extraneous-dependencies */
import { storiesOf } from '@storybook/vue';
import { withKnobs } from '@storybook/addon-knobs';
import bugReportModal from '@/components/bugReportModal';
import bugReportSuccessModal from '@/components/bugReportSuccessModal';
const stories = storiesOf('Bug Report Modal', module);
stories.addDecorator(withKnobs);
stories
.add('bugReportModal', () => ({
components: { bugReportModal },
data () {
return {
};
},
template: `
<div>
<bug-report-modal></bug-report-modal>
</div>
`,
mounted () {
this.$root.$emit('bv::show::modal', 'bug-report-modal');
},
}))
.add('bugReportSuccessModal', () => ({
components: { bugReportSuccessModal },
data () {
return {
};
},
template: `
<div>
<bug-report-success-modal></bug-report-success-modal>
</div>
`,
mounted () {
this.$root.$emit('bv::show::modal', 'bug-report-success-modal');
},
}));
@@ -0,0 +1,243 @@
<template>
<b-modal
:id="modalId"
size="md"
:hide-footer="true"
>
<div
slot="modal-header"
class="bug-report-modal-header"
>
<h2 v-once>
{{ $t('reportBug') }}
</h2>
<div v-once class="report-bug-header-describe">
{{ $t('reportBugHeaderDescribe') }}
</div>
<div class="dialog-close">
<close-icon @click="close()" :purple="true"/>
</div>
</div>
<div>
<form
class="form"
@submit.prevent.stop="sendBugReport()"
>
<div
class="form-group"
>
<label
v-once
for="emailInput"
>
{{ $t('email') }}
</label>
<div class="mb-2 description-label" v-once>
{{ $t('reportEmailText') }}
</div>
<input
id="emailInput"
v-model="email"
class="form-control"
type="email"
:required="true"
:placeholder="$t('reportEmailPlaceholder')"
:class="{'input-invalid': emailInvalid, 'input-valid': emailValid}"
>
<div class="error-label mt-2" v-if="emailInvalid">
{{ $t('reportEmailError') }}
</div>
</div>
<label v-once>
{{ $t('reportDescription') }}
</label>
<div class="mb-2 description-label" v-once>
{{ $t('reportDescriptionText') }}
</div>
<textarea
v-model="message"
class="form-control"
rows="5"
:required="true"
:placeholder="$t('reportDescriptionPlaceholder')"
:class="{'input-invalid': messageInvalid && this.message.length === 0}"
>
</textarea>
<button
class="btn btn-primary submit-button btn-block mx-auto mt-4"
type="submit"
:disabled="!message || !emailValid"
>
{{ $t('submitBugReport') }}
</button>
</form>
</div>
<div class="modal-footer">
<a
class="cancel-link mx-auto mb-4"
@click.prevent="close()"
>
{{ $t('cancel') }}
</a>
</div>
</b-modal>
</template>
<style lang="scss">
#bug-report-modal {
.modal-header {
padding: 0;
border: none;
}
.modal-dialog {
border-top-left-radius: 8px;
border-top-right-radius: 8px;
overflow: auto;
}
.modal-body {
padding-top: 1rem;
padding-right: 1.5rem;
padding-left: 1.5rem;
padding-bottom: 0;
}
.modal-footer {
border-top: 0;
padding-bottom: 0;
}
}
</style>
<style scoped lang="scss">
@import '~@/assets/scss/colors.scss';
h2 {
color: $white;
}
.bug-report-modal-header {
color: $white;
width: 100%;
padding: 2rem 3rem 1.5rem 1.5rem;
background-image: linear-gradient(288deg, #{$purple-200}, #{$purple-300});
}
.report-bug-header-describe {
font-size: 14px;
line-height: 1.71;
color: $purple-600;
}
label {
font-weight: bold;
line-height: 1.71;
color: $gray-50;
}
.cancel-link {
color: $blue-10;
line-height: 1.71;
}
.submit-button {
width: auto;
}
.error-label {
font-size: 12px;
line-height: 1.33;
color: $maroon-10;
}
.description-label {
font-size: 12px;
line-height: 1.33;
color: $gray-100;
}
</style>
<script>
import axios from 'axios';
import isEmail from 'validator/lib/isEmail';
import closeIcon from '@/components/shared/closeIcon';
import { mapState } from '@/libs/store';
import { MODALS } from '@/libs/consts';
export default {
components: {
closeIcon,
},
data () {
return {
message: '',
email: '',
messageInvalid: false,
modalId: MODALS.BUG_REPORT,
};
},
methods: {
async sendBugReport () {
this.messageInvalid = false;
if (this.message.length === 0) {
this.messageInvalid = true;
return;
}
await axios.post('/api/v4/bug-report', {
message: this.message,
email: this.email,
});
this.message = '';
this.close();
this.$root.$emit('bv::show::modal', MODALS.BUG_REPORT_SUCCESS);
},
close () {
this.$root.$emit('bv::hide::modal', MODALS.BUG_REPORT);
},
},
computed: {
...mapState({ user: 'user.data' }),
emailValid () {
if (this.email.length <= 3) return false;
return isEmail(this.email);
},
emailInvalid () {
if (this.email.length <= 3) return false;
return !this.emailValid;
},
},
mounted () {
const { user } = this;
let email = user.auth?.local?.email;
if (!email && user.auth?.facebook?.emails) {
email = user.auth.facebook.emails?.[0]?.value;
}
if (!email && user.auth?.google?.emails) {
email = user.auth.google.emails?.[0]?.value;
}
if (!email && user.auth?.apple?.emails) {
email = user.auth.apple.emails?.[0]?.value;
}
this.email = email;
},
};
</script>
@@ -0,0 +1,154 @@
<template>
<b-modal
:id="modalId"
size="md"
:hide-footer="true"
>
<div
slot="modal-header"
class="bug-report-modal-header"
>
<div class="green-bar"></div>
<div class="sub-header position-relative">
<div class="dialog-close">
<close-icon @click="close()" />
</div>
</div>
</div>
<div>
<span class="svg-icon check-icon"
v-html="icons.checkCircleIcon"
></span>
<div class="title" v-once>
{{ $t('reportSent') }}
</div>
<div class="text mt-3 mb-4" v-once>
{{ $t('reportSentDescription') }}
</div>
</div>
</b-modal>
</template>
<style lang="scss">
#bug-report-success-modal {
.modal-header {
padding: 0;
border: none;
}
.modal-content {
border: 0;
}
.modal-dialog {
border-top-left-radius: 8px;
border-top-right-radius: 8px;
overflow: auto;
width: 330px;
}
.modal-body {
padding: 0 1.5rem;
}
.modal-footer {
border-top: 0;
padding-bottom: 0;
}
}
</style>
<style scoped lang="scss">
@import '~@/assets/scss/colors.scss';
h2 {
color: $white;
}
.bug-report-modal-header {
width: 100%;
.green-bar {
height: 8px;
width: 100%;
background-color: $green-10;
}
}
.check-icon {
width: 64px;
height: 64px;
margin: 0 auto;
margin-top: -0.25rem;
}
.report-bug-header-describe {
font-size: 14px;
line-height: 1.71;
color: $purple-600;
}
label {
font-weight: bold;
line-height: 1.71;
color: $gray-50;
}
.cancel-link {
color: $blue-10;
line-height: 1.71;
}
.submit-button {
width: auto;
}
.error-label {
font-size: 12px;
line-height: 1.33;
color: $maroon-10;
}
.description-label {
font-size: 12px;
line-height: 1.33;
color: $gray-100;
}
.text {
min-height: 0;
}
</style>
<script>
import closeIcon from '@/components/shared/closeIcon';
import checkCircleIcon from '@/assets/svg/check_circle.svg';
import { MODALS } from '@/libs/consts';
export default {
components: {
closeIcon,
},
data () {
return {
icons: Object.freeze({
checkCircleIcon,
}),
modalId: MODALS.BUG_REPORT_SUCCESS,
};
},
methods: {
close () {
this.$root.$emit('bv::hide::modal', MODALS.BUG_REPORT_SUCCESS);
},
},
computed: {},
mounted () {},
};
</script>
@@ -311,6 +311,7 @@ import bronzeGuildBadgeIcon from '@/assets/svg/bronze-guild-badge-small.svg';
import QuestDetailModal from './questDetailModal';
import RightSidebar from '@/components/groups/rightSidebar';
import InvitationListModal from './invitationListModal';
import { PAGES } from '@/libs/consts';
export default {
components: {
@@ -554,7 +555,7 @@ export default {
this.$root.$emit('bv::show::modal', 'group-gems-modal');
},
messageLeader () {
window.open(`/private-messages?uuid=${this.group.leader.id}`);
window.open(`${PAGES.PRIVATE_MESSAGES}?uuid=${this.group.leader.id}`);
},
},
};
@@ -389,6 +389,7 @@ import messageIcon from '@/assets/members/message.svg';
import starIcon from '@/assets/members/star.svg';
import dots from '@/assets/svg/dots.svg';
import SelectList from '@/components/ui/selectList';
import { PAGES } from '@/libs/consts';
export default {
components: {
@@ -558,7 +559,7 @@ export default {
});
this.$root.$emit('bv::hide::modal', 'members-modal');
this.$router.push('/private-messages');
this.$router.push(PAGES.PRIVATE_MESSAGES);
},
async searchMembers (searchTerm = '') {
this.members = await this.$store.state.memberModalOptions.fetchMoreMembers({
@@ -361,7 +361,7 @@
</li>
<li>
<a
:href="bugReportMailto"
@click.prevent="openBugReportModal()"
target="_blank"
>
{{ $t('reportBug') }}
@@ -89,6 +89,7 @@
</style>
<script>
import find from 'lodash/find';
import { mapState } from '@/libs/store';
import BaseBanner from './base';
@@ -98,8 +99,11 @@ export default {
},
computed: {
...mapState({
currentEvent: 'worldState.data.currentEvent',
currentEventList: 'worldState.data.currentEventList',
}),
currentEvent () {
return find(this.currentEventList, event => Boolean(event.gemsPromo));
},
eventName () {
return this.currentEvent && this.currentEvent.event;
},
@@ -63,6 +63,7 @@
</style>
<script>
import find from 'lodash/find';
import { mapState } from '@/libs/store';
import BaseBanner from './base';
@@ -74,8 +75,11 @@ export default {
},
computed: {
...mapState({
currentEvent: 'worldState.data.currentEvent',
currentEventList: 'worldState.data.currentEventList',
}),
currentEvent () {
return find(this.currentEventList, event => Boolean(event.promo));
},
eventName () {
return this.currentEvent && this.currentEvent.event;
},
@@ -311,7 +311,7 @@
</router-link>
<a
class="topbar-dropdown-item dropdown-item"
:href="bugReportMailto"
@click.prevent="openBugReportModal()"
target="_blank"
>
{{ $t('reportBug') }}
@@ -17,6 +17,7 @@
<script>
import BaseNotification from './base';
import { PAGES } from '@/libs/consts';
export default {
components: {
@@ -25,7 +26,7 @@ export default {
props: ['notification', 'canRemove'],
methods: {
action () {
this.$router.push('/private-messages');
this.$router.push(PAGES.PRIVATE_MESSAGES);
},
},
};
@@ -143,6 +143,7 @@ import userIcon from '@/assets/svg/user.svg';
import MenuDropdown from '../ui/customMenuDropdown';
import MessageCount from './messageCount';
import { EVENTS } from '@/libs/events';
import { PAGES } from '@/libs/consts';
export default {
components: {
@@ -170,7 +171,7 @@ export default {
if (this.$router.history.current.name === 'privateMessages') {
this.$root.$emit(EVENTS.PM_REFRESH);
} else {
this.$router.push('/private-messages');
this.$router.push(PAGES.PRIVATE_MESSAGES);
}
},
showProfile (startingPage) {
@@ -179,7 +179,7 @@
</div>
</div>
<show-more-button
v-if="petGroup.key !== 'specialPets' && !(petGroup.key === 'wackyPets' && selectedSortBy !== 'sortByColor')"
v-if="petRowCount[petGroup.key] > 1 && petGroup.key !== 'specialPets' && !(petGroup.key === 'wackyPets' && selectedSortBy !== 'sortByColor')"
:show-all="$_openedItemRows_isToggled(petGroup.key)"
class="show-more-button"
@click="setShowMore(petGroup.key)"
@@ -238,7 +238,7 @@
</div>
</div>
<show-more-button
v-if="mountGroup.key !== 'specialMounts'"
v-if="mountRowCount[mountGroup.key] > 1 && mountGroup.key !== 'specialMounts'"
:show-all="$_openedItemRows_isToggled(mountGroup.key)"
@click="setShowMore(mountGroup.key)"
/>
@@ -522,6 +522,9 @@ export default {
currentDraggingFood: null,
selectedDrawerTab: 0,
petRowCount: {},
mountRowCount: {},
};
},
computed: {
@@ -774,8 +777,9 @@ export default {
pets (animalGroup, hideMissing, sortBy, searchText) {
const pets = this.listAnimals(animalGroup, 'pet', hideMissing, sortBy, searchText);
// Don't group special
// Don't group special, no 'show more' button either
if (animalGroup.key === 'specialPets' || (animalGroup.key === 'wackyPets' && sortBy !== 'sortByColor')) {
this.petRowCount[animalGroup.key] = 1;
return { none: pets };
}
@@ -787,14 +791,22 @@ export default {
} else if (sortBy === 'sortByHatchable') {
groupKey = i => (i.isHatchable() ? 0 : 1);
}
const groupedPets = groupBy(pets, groupKey);
return groupBy(pets, groupKey);
// Pets are rendered as grouped "rows". Count helps decide if show more button is necessary.
if (sortBy === 'AZ') {
this.petRowCount[animalGroup.key] = 1;
} else {
this.petRowCount[animalGroup.key] = Object.keys(groupedPets).length;
}
return groupedPets;
},
mounts (animalGroup, hideMissing, sortBy, searchText) {
const mounts = this.listAnimals(animalGroup, 'mount', hideMissing, sortBy, searchText);
// Don't group special
if (animalGroup.key === 'specialMounts') {
this.mountRowCount[animalGroup.key] = 1;
return { none: mounts };
}
@@ -804,8 +816,13 @@ export default {
} else if (sortBy === 'AZ') {
groupKey = '';
}
return groupBy(mounts, groupKey);
const groupedMounts = groupBy(mounts, groupKey);
if (sortBy === 'AZ') {
this.mountRowCount[animalGroup.key] = 1;
} else {
this.mountRowCount[animalGroup.key] = Object.keys(groupedMounts).length;
}
return groupedMounts;
},
// Actions
updateHideMissing (newVal) {
@@ -364,6 +364,7 @@
</style>
<script>
import find from 'lodash/find';
import moment from 'moment';
import { mapState } from '@/libs/store';
import markdown from '@/directives/markdown';
@@ -408,8 +409,11 @@ export default {
...mapState({
user: 'user.data',
originalGemsBlocks: 'content.gems',
currentEvent: 'worldState.data.currentEvent',
currentEventList: 'worldState.data.currentEventList',
}),
currentEvent () {
return find(this.currentEventList, event => Boolean(event.gemsPromo) || Boolean(event.promo));
},
eventName () {
return this.currentEvent && this.currentEvent.event;
},
@@ -210,6 +210,7 @@
<script>
import debounce from 'lodash/debounce';
import find from 'lodash/find';
import isUUID from 'validator/lib/isUUID';
import { mapState } from '@/libs/store';
import closeIcon from '@/assets/svg/close.svg';
@@ -227,8 +228,11 @@ export default {
},
computed: {
...mapState({
currentEvent: 'worldState.data.currentEvent',
currentEventList: 'worldState.data.currentEventList',
}),
currentEvent () {
return find(this.currentEventList, event => Boolean(event.gemsPromo) || Boolean(event.promo));
},
searchCannotSubmit () {
if (this.userSearchTerm.length < 1) return true;
return typeof this.foundUser._id === 'undefined';
@@ -111,6 +111,7 @@
</style>
<script>
import find from 'lodash/find';
import { mapState } from '@/libs/store';
import SecondaryMenu from '@/components/secondaryMenu';
import gifts from '@/assets/svg/gifts-vertical.svg';
@@ -128,8 +129,11 @@ export default {
},
computed: {
...mapState({
currentEvent: 'worldState.data.currentEvent',
currentEventList: 'worldState.data.currentEventList',
}),
currentEvent () {
return find(this.currentEventList, event => Boolean(event.promo));
},
promo () {
if (!this.currentEvent || !this.currentEvent.promo) return 'none';
return this.currentEvent.promo;
@@ -2,6 +2,11 @@
<button
title="close dialog"
@click="$emit('click', $event)"
:style="{
'--icon-color': iconColor,
'--icon-color-hover': iconColorHover,
}"
:class="{'purple': purple}"
>
<div
v-once
@@ -16,6 +21,7 @@ import svgClose from '@/assets/svg/close.svg';
export default {
name: 'CloseIcon',
props: ['iconColor', 'iconColorHover', 'purple'],
data () {
return {
icons: Object.freeze({
@@ -43,13 +49,18 @@ export default {
width: 1rem;
height: 1rem;
&.purple {
--icon-color: #{$purple-400};
--icon-color-hover: #{$purple-500};
}
::v-deep svg path {
stroke: $gray-200;
stroke: var(--icon-color, #{$gray-200});
}
&:hover {
::v-deep svg path {
stroke: $gray-100;
stroke: var(--icon-color-hover, #{$gray-100});
}
}
}
@@ -66,6 +66,7 @@
<script>
import debounce from 'lodash/debounce';
import find from 'lodash/find';
import { mapState } from '@/libs/store';
import notification from './notification';
@@ -103,7 +104,7 @@ export default {
removalIntervalId: null,
notificationTopY: '0px',
preventMultipleWatchExecution: false,
gemsPromoBannerHeight: null,
eventPromoBannerHeight: null,
sleepingBannerHeight: null,
};
},
@@ -111,8 +112,14 @@ export default {
...mapState({
notificationStore: 'notificationStore',
userSleeping: 'user.data.preferences.sleep',
currentEvent: 'worldState.data.currentEvent',
currentEventList: 'worldState.data.currentEventList',
}),
currentEvent () {
return find(this.currentEventList, event => Boolean(event.gemsPromo) || Boolean(event.promo));
},
isEventActive () {
return Boolean(this.currentEvent?.event);
},
notificationsTopPosClass () {
const base = 'notifications-top-pos-';
let modifier = '';
@@ -132,10 +139,8 @@ export default {
scrollPosToCheck += this.sleepingBannerHeight;
}
if (this.currentEvent
&& this.currentEvent.event
) {
scrollPosToCheck += this.gemsPromoBannerHeight ?? 0;
if (this.isEventActive) {
scrollPosToCheck += this.eventPromoBannerHeight ?? 0;
}
return scrollPosToCheck;
@@ -169,7 +174,7 @@ export default {
this.preventMultipleWatchExecution = false;
},
currentEvent: function currentEventChanged () {
this.gemsPromoBannerHeight = getBannerHeight('gems-promo');
this.updateEventBannerHeight();
},
},
async mounted () {
@@ -355,10 +360,31 @@ export default {
}, 16),
updateBannerHeightAndScrollY () {
this.gemsPromoBannerHeight = getBannerHeight('gems-promo');
this.updateEventBannerHeight();
this.sleepingBannerHeight = getBannerHeight('damage-paused');
this.updateScrollY();
},
updateEventBannerHeight () {
if (this.isEventActive) {
this.eventPromoBannerHeight = getBannerHeight(this.currentEventBannerName());
}
},
currentEventBannerName () {
// if there are any other types of promo bars
// this method needs to be updated
if (this.currentEvent?.promo) {
return 'gift-promo';
}
if (this.currentEvent?.gemsPromo) {
return 'gems-promo';
}
return '';
},
},
};
</script>
@@ -9,13 +9,11 @@
<a href="mailto:admin@habitica.com">admin&commat;habitica&period;com</a>
<span v-if="user">
<br>
{{ $t('reportBug') }}
&colon;&nbsp;
<a
:href="bugReportMailto"
@click.prevent="openBugReportModal()"
target="_blank"
>
admin&commat;habitica&period;com
{{ $t('reportBug') }}
</a>
<br>
{{ $t('reportCommunityIssues') }}
@@ -3,7 +3,7 @@
<div class="container-fluid">
<h1>Privacy Notice</h1>
<p class="strong pagemeta">
Last Updated: October 28, 2021
Last Updated: December 10, 2021
</p>
<p>
HabitRPG, Inc. (HabitRPG, we, us, or our) welcomes you. This privacy notice (the Privacy
@@ -29,10 +29,10 @@
<h3>Contact Information</h3>
<p>
We collect contact information through our Service; contact information typically includes your name,
email address, phone number and any other information you provide in messages to us. We use such
contact information for purposes such as providing you with information about the Service, responding to
your inquiries, sending you email alerts (including marketing emails), verifying your identity or providing
you the Service.
email address, and any other information you provide in messages to us. We use such contact information
for purposes such as providing you with information about the Service, responding to your inquiries,
sending you email alerts (including marketing emails), verifying your identity or providing you the
Service.
</p>
<h3>Account Access Information</h3>
<p>
@@ -98,8 +98,9 @@
<li><strong>Session Cookies</strong>: We use session cookies to make it easier for you to navigate our Service. A
session ID cookie expires when you close the Service.</li>
<li><strong>Persistent Cookies</strong>: A persistent cookie remains on your device for an extended period of time or
until you delete it. Persistent cookies enable us to track and target the interests of our visitors to
personalize the experience on our Service.</li>
until you delete it. Persistent cookies enable us to better understand how you interact with the Service and to
provide visitors with a better and more personalized experience by retaining information about their identity and
preferences, including but not limited to keeping them logged in even if the browser is closed.</li>
</ul>
<p>
If you do not want us to place a cookie on your device, you may be able to turn that feature off on your
@@ -223,8 +224,8 @@
and then selecting the Authentication option.
</p>
<p>
If you would like us to fully delete your account, please email us at admin@habitica and we will handle
your request within 30 days.
If you would like us to fully delete your account and all data associated with it, please email us at
admin@habitica and we will handle your request within 30 days.
</p>
<p>
You may opt out at any time from the use of your personal information for direct marketing purposes by
@@ -275,11 +276,6 @@
to submit a request pursuant to Section 1798.83, please contact HabitRPG via email at
<a href='mailto:admin@habitica.com'>admin@habitica.com</a>.
</p>
<h2>DO NOT TRACK</h2>
<p>
HabitRPG does not respond to Do Not Track settings or other related mechanisms on our Website at
this time.
</p>
<h2>NEVADA PRIVACY RIGHTS</h2>
<p>
If you are a resident of Nevada, you have the right to opt-out of the sale of certain personal information to
@@ -287,6 +283,11 @@
Nevada Do Not Sell Request and providing us with your name and the email address associated with
your account.
</p>
<h2>DO NOT TRACK</h2>
<p>
HabitRPG does not respond to Do Not Track settings or other related mechanisms on our Website at
this time.
</p>
<h2>LINKS TO EXTERNAL WEBSITES</h2>
<p>
The Service may contain links to third-party websites (<span style="text-decoration: underline;">External
@@ -310,8 +311,8 @@
</p>
<address>
<strong>HabitRPG, Inc.</strong>
<br>11870 Santa Monica Blvd., Suite 106-577
<br>Los Angeles, CA 90025
<br>202 Bicknell Ave., Ground Floor
<br>Santa Monica, CA 90405
<br>Email&colon;&nbsp;
<a href="mailto:admin@habitica.com">admin@habitica.com</a>
</address>
+78 -596
View File
@@ -1,604 +1,86 @@
<template>
<!-- eslint-disable max-len -->
<div class="container-fluid">
<h1>Terms of Use</h1>
<p class="pagemeta">
Last updated July 27, 2015
<br>
<small>(Corrected minimum age requirement to under 13 years of age per COPPA)</small>
<br>
<br>
</p>
<p>
HabitRPG &lpar;or 'we'&rpar; provides services through our
software applications for various devices and platforms &lpar;'HabitRPG
Applications'&rpar; and the HabitRPG&period;com domain&comma; and any sub domains thereto
&lpar;the 'Sites'&rpar;&period; Individually or collectively&comma; HabitRPG Applications and
Sites may be referred to as the 'Services'&period;
</p>
<p>
Please read the following terms and conditions &lpar;'Terms of
Service'&rpar; carefully&period; These Terms of Service govern your access to and
use of the Services and HabitRPG Content &lpar;defined below&rpar; and set forth
the legally binding terms for your use of the Services and HabitRPG
Content&comma; whether or not you have registered as a Member&period;
</p>
<p>
Certain areas of the Services &lpar;and your access to or use of
HabitRPG Content&rpar; may have different terms and conditions posted or may
require you to agree with and accept additional terms and conditions&period; If
there is a conflict between these Terms of Service and terms and
conditions posted for a specific area of the Services or HabitRPG
Content&comma; the latter terms and conditions will take precedence with
respect to your use of or access to that area of the Services or HabitRPG
Content&period;
</p>
<p>
YOU ACKNOWLEDGE AND AGREE THAT&comma; BY CLICKING ON THE 'I AGREE' OR
'I ACCEPT' BUTTON&comma; OR BY ACCESSING OR USING THE SERVICES OR BY
DOWNLOADING OR POSTING ANY CONTENT FROM OR ON THE SITES OR THROUGH THE
SERVICES&comma; YOU ARE INDICATING THAT YOU HAVE READ&comma; UNDERSTAND AND AGREE TO
BE BOUND BY THESE TERMS&comma; WHETHER OR NOT YOU HAVE REGISTERED AS A MEMBER&comma;
AND AGREE TO OUR PRIVACY POLICY AS DESCRIBED BELOW&period; IF YOU DO NOT AGREE
TO THESE TERMS&comma; THEN YOU HAVE NO RIGHT TO ACCESS OR USE THE SERVICES OR
HABITRPG CONTENT&period;
</p>
<p>
<strong>Modification</strong>
<br>HabitRPG reserves the right&comma; at its sole discretion&comma; to modify&comma;
discontinue or terminate the Services&comma; including any portion thereof on
a global or individual basis&comma; or to modify these Terms of Service&comma; at
any time and without prior notice&period; If we modify these Terms of Service&comma;
we will update the 'Last Updated Date' above and post the modification
on the Sites and perhaps elsewhere within the Services&period; By continuing to
access or use the Services after we have posted a modification to these
Terms of Service or have provided you with notice of a modification&comma; you
are indicating that you agree to be bound by the modified Terms of
Service&period; If the modified Terms of Service are not acceptable to you&comma;
your only recourse is to cease using the Services&period;
</p>
<p>
<strong>Eligibility and HabitRPG Account Registration</strong>
<br>In order to access certain features of the Sites and Services&comma; and to
post any Public User Content &lpar;defined below&rpar; on the Sites or through the
Services&comma; you must register to create an account &lpar;'HabitRPG Account'&rpar; and
become a 'Member'&period; In compliance with privacy laws&comma; we do not allow
people below the age of 13 to create accounts&semi; please see our Privacy
Policy for further information&period; During the registration process&comma; you
will be required to provide certain information and you will establish a
username and a password&period; You agree to provide accurate&comma; current and
complete information during the registration process and to update such
information to keep it accurate&comma; current and complete&period; HabitRPG reserves
the right to suspend or terminate your HabitRPG Account if any
information provided during the registration process or thereafter
proves to be inaccurate&comma; not current or incomplete&period; If you are not a
Member you may browse all areas of the Sites or use the parts of the
Services that are not limited to Members only&period; You are responsible for
safeguarding your password&period; You agree not to disclose your password to
any third party and to take sole responsibility for any activities or
actions under your HabitRPG Account&comma; whether or not you have authorized
such activities or actions&period; You agree to immediately notify HabitRPG of
any unauthorized use of your HabitRPG Account&period; We are not liable for any
damages or losses caused by someone using your account without your
permission&period;
</p>
<p>
<strong>Privacy</strong>
<br>See
<a href="/static/privacy">HabitRPG&apos;s Privacy Policy</a> for
information and notices concerning HabitRPG&apos;s collection and use of your
personal information&period; If you have any questions about the HabitRPG
Privacy Policy&comma; please contact HabitRPG at privacy AT HabitRPG&period;com&period; By
accessing the Services you are agreeing to the terms of our Privacy
Policy&period;
</p>
<p>
<strong>Content</strong>
<br>Certain types of content are made available through the Services&period;
'HabitRPG Content' means&comma; collectively&comma; the text&comma; data&comma; graphics&comma; images&comma;
illustrations&comma; forms and look and feel attributes&comma; HabitRPG trademarks
and logos and other content made available through the Services&comma;
including any technology or code making up the Services&comma; excluding User
Content&period; 'Public User Content' means the text&comma; data&comma; graphics&comma; images&comma; photos&comma;
video or audiovisual content&comma; hypertext links and any other content uploaded&comma;
transmitted or submitted by a Member via the Services with the intent to share
with other users&period; 'Private User Content' means data created through the services
exclusively for personal use or private sharing&period;
This includes tasks and related data created in HabitRPG Tasks that have not
been explicitly shared publicly&period;
You understand that by using any of the Services&comma; you may encounter content
that may be deemed offensive&comma; indecent&comma; or objectionable&comma; which content
may or may not be identified as having explicit language&comma; and that the
results of any search or entering of a particular URL may automatically
and unintentionally generate links or references to objectionable
material&period; Nevertheless&comma; you agree to use the Services at your sole risk
and that we shall not have any liability to you for content that may be
found to be offensive&comma; indecent&comma; or objectionable&period;
</p>
<p>
<strong>Ownership</strong>
<br>The Services and HabitRPG Content are protected by copyright&comma; trademark&comma;
and other laws of the United States and foreign countries&period; Except as
expressly provided in these Terms of Service&comma; HabitRPG and its licensors
exclusively own all right&comma; title and interest in and to the Services and
HabitRPG Content&comma; including all associated intellectual property rights&period;
You will not remove&comma; alter or obscure any copyright&comma; trademark&comma; service
mark or other proprietary rights notices incorporated in or accompanying
the Services or HabitRPG Content&period;
</p>
<p>
<strong>HabitRPG License</strong>
<br>Subject to your compliance with the terms and conditions of these Terms
of Service&comma; HabitRPG grants you a limited&comma; non-exclusive&comma;
non-transferable license&comma; without the right to sublicense&comma; to access&comma;
use&comma; view&comma; download and print&comma; where applicable&comma; the Services and any
HabitRPG Content solely for your personal and non-commercial purposes&period;
You will not use&comma; copy&comma; adapt&comma; modify&comma; prepare derivative works based
upon&comma; distribute&comma; license&comma; sell&comma; transfer&comma; publicly display&comma; publicly
perform&comma; transmit&comma; stream&comma; broadcast or otherwise exploit the Services
or HabitRPG Content&comma; except as expressly permitted in these Terms of
Service&period; No licenses or rights are granted to you by implication or
otherwise under any intellectual property rights owned or controlled by
HabitRPG or its licensors&comma; except for the licenses and rights expressly
granted in these Terms of Service&period; With respect to HabitRPG Applications&comma;
your license is limited to use of such applications on platforms and
devices that you own or control&comma; and you may not distribute or make the
HabitRPG Applications available over a network where it could be used by
multiple devices at the same time&period;
</p>
<p>
<strong>Public User Content</strong>
<br>By making available any Public User Content through the Services&comma; you hereby
grant to HabitRPG a worldwide&comma; irrevocable&comma; perpetual&comma; non-exclusive&comma;
transferable&comma; royalty-free license&comma; with the right to sublicense&comma; to
use&comma; copy&comma; adapt&comma; modify&comma; distribute&comma; license&comma; sell&comma; transfer&comma; publicly
display&comma; publicly perform&comma; transmit&comma; stream&comma; broadcast and otherwise
exploit such Public User Content only on&comma; through or by means of the Services&period;
HabitRPG does not claim any ownership rights in any such Public User Content and
nothing in these Terms of Service will be deemed to restrict any rights
that you may have to use and exploit any such Public User Content&period;
</p>
<p>
You acknowledge and agree that you are solely responsible for all
Public User Content that you make available through the Services&period; Accordingly&comma;
you represent and warrant that&colon; &lpar;i&rpar; you either are the sole and
exclusive owner of all Public User Content that you make available through the
Services or you have all rights&comma; licenses&comma; consents and releases that
are necessary to grant to HabitRPG the rights in such Public User Content&comma; as
contemplated under these Terms of Service&semi; and &lpar;ii&rpar; neither the User
Content nor your posting&comma; uploading&comma; publication&comma; submission or
transmittal of the Public User Content or HabitRPG&apos;s use of the Public User Content &lpar;or
any portion thereof&rpar; on&comma; through or by means of the Services will
infringe&comma; misappropriate or violate a third party&apos;s patent&comma; copyright&comma;
trademark&comma; trade secret&comma; moral rights or other intellectual property
rights&comma; or rights of publicity or privacy&comma; or result in the violation of
any applicable law or regulation&period;
</p>
<p>
Copyrighted Materials&colon; No Infringing Use&period; You will not use the
Services to offer&comma; display&comma; distribute&comma; transmit&comma; route&comma; provide
connections to or store any material that infringes copyrighted works or
otherwise violates or promotes the violation of the intellectual
property rights of any third party&period; HabitRPG has adopted and implemented
a policy that provides for the termination in appropriate circumstances
of the accounts of users who repeatedly infringe or are believed to be
or are charged with repeatedly infringing the rights of copyright
holders&period;
</p>
<p>
<strong>Notify Us of Infringers</strong>
<br>If you believe that something on the Services violates your copyright&comma;
notify our copyright agent in writing&period; The contact information for our
copyright agent is at the bottom of this section&period;
</p>
<p>
In order for us to take action&comma; you must do the following in your
notice&colon;
</p>
<p>
&lpar;1&rpar; provide your physical or electronic signature&semi; &lpar;2&rpar; identify
the copyrighted work that you believe is being infringed&semi; &lpar;3&rpar; identify
the item on the Services that you think is infringing your work and
include sufficient information about where the material is located on
the Services &lpar;including which website and URL&rpar; so that we can find it&semi;
&lpar;4&rpar; provide us with a way to contact you&comma; such as your address&comma;
telephone number&comma; or e-mail&semi; &lpar;5&rpar; provide a statement that you believe in
good faith that the item you have identified as infringing is not
authorized by the copyright owner&comma; its agent&comma; or the law to be used on
the Services&semi; and &lpar;6&rpar; provide a statement that the information you
provide in your notice is accurate&comma; and that &lpar;under penalty of perjury&rpar;&comma;
you are authorized to act on behalf of the copyright owner whose work is
being infringed&period;
</p>
<p>Here is the contact information for our copyright agent&colon;</p>
<p>
Copyright Enforcement
<br>HabitRPG, Inc.
<br>11870 Santa Monica Blvd., Suite 106-577
<br>Los Angeles, CA 90025
<br>E-Mail&colon;
<a href="mailto:admin@habitica.com">admin@habitica.com</a>
</p>
<p>
Again&comma; we cannot take action unless you give us all the required
information&period;
</p>
<p>
<strong>Ratings and Comments & Feedback&period;</strong>
<br>You can rate and make comments about content made available through the
Services &lpar;'Comments'&rpar;&period; HabitRPG advises you to exercise caution and good
judgment when leaving such Comments&period; Once you complete and submit your
Comments to the Services you will not be able to go back and edit your
Comments&period; You should also be aware that you could be held legally
responsible for damages to someone&apos;s reputation if your Comments are
deemed to be defamatory&period; Without limiting any other terms of this Terms
of Service&comma; HabitRPG may&comma; but is under no obligation to&comma; monitor or
censor Comments and disclaims any and all liability relating thereto&period;
Notwithstanding the foregoing&comma; HabitRPG does reserve the right&comma; in its
sole discretion&comma; to remove any Comments that it deems to be improper&comma;
inappropriate or inconsistent with the online activities that are
permitted under these Terms of Service&period; We welcome and encourage you to
provide feedback&comma; comments and suggestions for improvements to the
Services &lpar;'Feedback'&rpar;&period; You may submit Feedback by emailing us at support
AT HabitRPG&period;com&period; You acknowledge and agree that all Comments and Feedback
will be the sole and exclusive property of HabitRPG and you hereby
irrevocably assign to HabitRPG and agree to irrevocably assign to HabitRPG
all of your right&comma; title&comma; and interest in and to all Comments and
Feedback&comma; including without limitation all worldwide patent rights&comma;
copyright rights&comma; trade secret rights&comma; and other proprietary or
intellectual property rights therein&period; At HabitRPG&apos;s request and expense&comma;
you will execute documents and take such further acts as HabitRPG may
reasonably request to assist HabitRPG to acquire&comma; perfect&comma; and maintain
its intellectual property rights and other legal protections for the
Comments and Feedback&period;
</p>
<p>
<strong>Interactions between Users</strong>
<br>You are solely responsible for your interactions &lpar;including any
disputes&rpar; with other users&period; You understand that HabitRPG does not in any
way screen HabitRPG users&comma; except to only allow people aged 13 and over
to create accounts&period; You are solely responsible for&comma; and will exercise
caution&comma; discretion&comma; common sense and judgment in&comma; using the Services
and disclosing personal information to other HabitRPG users&period; You agree to
take reasonable precautions in all interactions with other HabitRPG
users&comma; particularly if you decide to meet a HabitRPG user offline&comma; or in
person&period; Your use of the Services&comma; HabitRPG Content and any other content
made available through the Services is at your sole risk and discretion
and HabitRPG hereby disclaims any and all liability to you or any third
party relating thereto&period; HabitRPG reserves the right to contact Members&comma;
in compliance with applicable law&comma; in order to evaluate compliance with
the rules and policies in these Terms of Service&period; You will cooperate
fully with HabitRPG to investigate any suspected unlawful&comma; fraudulent or
improper activity&comma; including&comma; without limitation&comma; granting authorized
HabitRPG representatives access to any password-protected portions of
your HabitRPG Account&period;
</p>
<p>
<strong>General Prohibitions</strong>
<br>You agree not to do any of the following while using the Services or
HabitRPG Content&colon;
<br>
</p>
<h1>Terms of Service</h1>
<p class="strong pagemeta">Last Updated: December 14, 2021</p>
<p>Thanks for choosing Habitica!</p>
<p>Our Service is provided by HabitRPG, Inc. ("HabitRPG"). By accepting these Terms of Service and our Privacy Policy located at: <a href="https://habitica.com/static/privacy" target="_blank">https://habitica.com/static/privacy</a> (collectively, the "Agreement"), registering for the Service (as defined below), accessing or using any part of the Service, or otherwise manifesting your assent to the Agreement, you acknowledge that you have read, understood, and agree to be legally bound by the Agreement. If you do not agree to (or cannot comply with) the Agreement, you are not permitted to access or use the Service.</p>
<p>By accepting or agreeing to this Agreement on behalf of a company or other legal entity, you represent and warrant that you have the authority to bind that company or other legal entity to the Agreement and, in such event, "you" and "your" will refer and apply to that company or other legal entity.</p>
<p class="strong">THE SECTIONS BELOW TITLED "BINDING ARBITRATION," AND "CLASS ACTION WAIVER" CONTAIN A BINDING ARBITRATION AGREEMENT AND CLASS ACTION WAIVER. THEY AFFECT YOUR LEGAL RIGHTS. PLEASE READ THEM.</p>
<h2>Changes to the Terms of Service</h2>
<p>These Terms of Service are effective as of the last updated date stated at the top of this page. We may change these Terms of Service from time to time with or without notice to you. By accessing the Service after we make any such changes to this Terms of Service, you are deemed to have accepted such changes. Please be aware that, to the extent permitted by applicable law, our use of the information collected is governed by the Terms of Service in effect at the time we collect the information. Please refer back to this Terms of Service on a regular basis.</p>
<p>Our Service allows you to upload, store, send, download, or receive content, including but not limited to information, text, graphics, artwork, or other material ("Content"). You retain ownership of any intellectual property rights that you have in your Content. You hereby grant HabitRPG a worldwide, perpetual, irrevocable, sublicenseable, transferable, assignable, non-exclusive, and royalty-free right and license to use, reproduce, distribute, adapt, modify, translate, create derivative works of, publicly perform, publicly display, digitally perform, make, have made, sell, offer for sale, and import your Content, including all intellectual property rights therein. You represent, warrant, and agree that your Content does not and will not violate any third-party intellectual property, privacy, or other rights, and that you have all right, title and interest in and to your Content required to grant us the license above. We reserve the right at all times, but have no obligation, to delete or refuse to use or distribute any Content on or through the Service, including your Content.</p>
<h2>Ideas and Suggestions/Requests</h2>
<p>HabitRPG appreciates receiving your ideas, comments, suggestions and requests regarding the Service ("Unsolicited Ideas"). By submitting your Unsolicited Ideas (in any form or medium), you are transferring all your right, title and interest therein exclusively to HabitRPG. As the owner of Unsolicited Ideas, we have unrestricted rights to use, disclose and process the Unsolicited Ideas for any purpose whatsoever without any compensation to you. You also give up any claim that any use, disclosure and processing by us or our licensees of your Unsolicited Ideas violates any of your rights, including moral rights, privacy rights, rights to publicity, proprietary or other rights, and rights to credit for the material or ideas set for therein.</p>
<h2>Software in Our Service</h2>
<p>When the Service requires or includes downloadable software ("Software"), it may may update automatically on your device once a new version or features become available to you. Some platforms may let you adjust your automatic update settings.</p>
<p>HabitRPG hereby grants you a personal, worldwide, royalty-free, non-assignable and non-exclusive license to use the Software provided by HabitRPG as part of the Service. You may not copy, modify, distribute, sell, or lease any part of our Service or included Software you are explicitly allowed to do so by the GPL-3.0 license, or you have our written permission for those parts not covered by the open source license.</p>
<p>Third party applications may use one of the permitted logos and signifiers in order to represent their applicability to the Service, but may not claim formal association with and/or impersonate HabitRPG or our staff without prior written consent. Third Party applications, the companies that own or provide them, and their employees and agents, are not authorized to make any promises or representations on our behalf, or change the terms of this Agreement.</p>
<p>We allow for personal, non-commercial uses like fanart under Commercial Commons License CC-NC-SA 3.0 terms.</p>
<p>Outside the above explicitly allowed use cases, you may not use our trademarks, service marks, trade names, logos, domain names, taglines, or trade dress without a signed written contract with us granting you a license to do so.</p>
<h2>Modifying and Termination of Service</h2>
<p>HabitRPG reserves the right, in its sole discretion, to add, modify, or remove functionalities or features from the Service, and improve, change and/or update the Service. We may also suspend or terminate the Service at any time, with or without notice to you.</p>
<p>You can choose to stop using our Service at any time. We may suspend or cease providing the Service to you at any time, including if we determine in our sole discretion, that:</p>
<ul>
<li>
Post&comma; upload&comma; publish&comma; submit or transmit any text&comma; graphics&comma;
images&comma; software&comma; music&comma; audio&comma; video&comma; information or other material
that&colon; &lpar;i&rpar; infringes&comma; misappropriates or violates a third party&apos;s
patent&comma; copyright&comma; trademark&comma; trade secret&comma; moral rights or other
intellectual property rights&comma; or rights of publicity or privacy&semi; &lpar;ii&rpar;
violates&comma; or encourages any conduct that would violate&comma; any applicable
law or regulation or would give rise to civil liability&semi; &lpar;iii&rpar; is
fraudulent&comma; false&comma; misleading or deceptive&semi; &lpar;iv&rpar; is defamatory&comma;
obscene&comma; pornographic&comma; vulgar or offensive&semi; &lpar;v&rpar; promotes
discrimination&comma; bigotry&comma; racism&comma; hatred&comma; harassment or harm against any
individual or group&semi; &lpar;vi&rpar; is violent or threatening or promotes
violence or actions that are threatening to any other person&semi; or &lpar;vii&rpar;
promotes illegal or harmful activities or substances &lpar;including but not
limited to activities that promote or provide instructional information
regarding the manufacture or purchase of illegal weapons or illegal
substances&rpar;&period;
</li>
<li>
Use&comma; display&comma; mirror&comma; frame or utilize framing techniques to
enclose the Services&comma; or any individual element or materials within the
Services&comma; HabitRPG&apos;s name&comma; any HabitRPG trademark&comma; logo or other
proprietary information&comma; the content of any text or the layout and
design of any page or form contained on a page&comma; without HabitRPG&apos;s
express written consent&semi;
</li>
<li>
Access&comma; tamper with&comma; or use non-public areas of the Services&comma;
HabitRPG&apos;s computer systems&comma; or the technical delivery systems of
HabitRPG&apos;s providers&semi;
</li>
<li>
Attempt to probe&comma; scan&comma; or test the vulnerability of any
HabitRPG system or network or breach any security or authentication
measures&semi;
</li>
<li>
Avoid&comma; bypass&comma; remove&comma; deactivate&comma; impair&comma; descramble or
otherwise circumvent any technological measure implemented by HabitRPG
or any of HabitRPG&apos;s providers or any other third party &lpar;including
another user&rpar; to protect the Services or HabitRPG Content&semi;
</li>
<li>
Attempt to access or search the Services or HabitRPG Content or
download HabitRPG Content from the Services through the use of any
engine&comma; software&comma; tool&comma; agent&comma; device or mechanism &lpar;including spiders&comma;
robots&comma; crawlers&comma; data mining tools or the like&rpar; other than the
software and&sol;or search agents provided by HabitRPG or other generally
available third party web browsers &lpar;such as Google Chrome&comma; Microsoft
Internet Explorer&comma; Mozilla Firefox&comma; Safari or Opera&rpar;&semi;
</li>
<li>
Send any unsolicited or unauthorized advertising&comma; promotional
materials&comma; email&comma; junk mail&comma; spam&comma; chain letters or other form of
solicitation&semi;
</li>
<li>
Use any meta tags or other hidden text or metadata utilizing a
HabitRPG trademark&comma; logo URL or product name without HabitRPG&apos;s express
written consent&semi;
</li>
<li>
Use the Services or HabitRPG Content for any commercial purpose
or the benefit of any third party or in any manner not permitted by
these Terms of Service&semi;
</li>
<li>
Forge any TCP&sol;IP packet header or any part of the header
information in any email or newsgroup posting&comma; or in any way use the
Services or HabitRPG Content to send altered&comma; deceptive or false
source-identifying information&semi;
</li>
<li>
Attempt to decipher&comma; decompile&comma; disassemble or reverse
engineer any of the software used to provide the Services or HabitRPG
Content&semi;
</li>
<li>
Interfere with&comma; or attempt to interfere with&comma; the access of
any user&comma; host or network&comma; including&comma; without limitation&comma; sending a
virus&comma; overloading&comma; flooding&comma; spamming&comma; or mail-bombing the Services&semi;
</li>
<li>
Collect or store any personally identifiable information from
the Services from other users of the Services without their express
permission&semi;
</li>
<li>
Impersonate or misrepresent your affiliation with any person
or entity&semi; Violate any applicable law or regulation&semi; or
</li>
<li>
Encourage or enable any other individual to do any of the
foregoing&period;
</li>
<li>You have violated any part of this Agreement, the Privacy Policy, or the Community Guidelines;</li>
<li>We have stopped offering the Service in your region; or</li>
<li>Doing so would be in the best interests of our community, the Service, or the rights of a third party.</li>
</ul>
<p>
HabitRPG will have the right to investigate and prosecute
violations of any of the above&comma; including intellectual property rights
infringement and Services security issues&comma; to the fullest extent of the
law&period; HabitRPG may involve and cooperate with law enforcement authorities
in prosecuting users who violate these Terms of Service&period; You acknowledge
that HabitRPG has no obligation to monitor your access to or use of the
Services or HabitRPG Content or to review or edit any Public User Content&comma; but
has the right to do so for the purpose of operating the Services&comma; to
ensure your compliance with these Terms of Service&comma; or to comply with
applicable law or the order or requirement of a court&comma; administrative
agency or other governmental body&period; HabitRPG reserves the right&comma; at any
time and without prior notice&comma; to remove or disable access to any
HabitRPG Content&comma; including&comma; any Public User Content&comma; that HabitRPG&comma; in its sole
discretion&comma; considers to be in violation of these Terms of Service or
otherwise harmful to the Services&period;
</p>
<p>
<strong>Links</strong>
<br>The Services may contain links to third-party websites or resources&period; You
acknowledge and agree that HabitRPG is not responsible or liable for&colon; &lpar;i&rpar;
the availability or accuracy of such websites or resources&semi; or &lpar;ii&rpar; the
content&comma; products&comma; or services on or available from such websites or
resources&period; Links to such websites or resources do not imply any
endorsement by HabitRPG of such websites or resources or the content&comma;
products&comma; or services available from such websites or resources&period; You
acknowledge sole responsibility for and assume all risk arising from
your use of any such websites or resources&period;
</p>
<p>
<strong>Termination and HabitRPG Account&semi; Cancellation</strong>
<br>Without limiting other remedies&comma; HabitRPG may at any time suspend or
terminate your HabitRPG Account and refuse to provide access to the
Services&period; In addition&comma; HabitRPG may notify authorities or take any
actions it deems appropriate&comma; without notice to you&comma; if HabitRPG suspects
or determines&comma; in its own discretion&comma; that you may have or there is a
significant risk that you have &lpar;i&rpar; failed to comply with any provision
of these Terms of Service or any policies or rules established by
HabitRPG&semi; or &lpar;ii&rpar; engaged in actions relating to or in the course of
using the Services that may be illegal or cause liability&comma; harm&comma;
embarrassment&comma; harassment&comma; abuse or disruption for you&comma; HabitRPG Users&comma;
HabitRPG or any other third parties or the Services&period;
</p>
<p>
You may terminate your HabitRPG Account at any time and for any
reason by sending email to support AT HabitRPG&period;com&period; Upon any termination
by a Member&comma; the related account will no longer be accessible&period;
</p>
<p>
After any termination&comma; you understand and acknowledge that we
will have no further obligation to provide the Services and all licenses
and other rights granted to you by these Terms of Service will
immediately cease&period; HabitRPG will not be liable to you or any third party
for termination of the Services or termination of your use of either&period;
UPON ANY TERMINATION OR SUSPENSION&comma; ANY CONTENT&comma; MATERIALS OR
INFORMATION &lpar;INCLUDING PUBLIC USER CONTENT&rpar; THAT YOU HAVE SUBMITTED ON THE
SERVICES OR THAT WHICH IS RELATED TO YOUR ACCOUNT MAY NO LONGER BE
ACCESSED BY YOU&period; Furthermore&comma; HabitRPG will have no obligation to
maintain any information stored in our database related to your account
or to forward any information to you or any third party&period;
</p>
<p>
Any suspension&comma; termination or cancellation will not affect your
obligations to HabitRPG under these Terms of Service &lpar;including&comma; without
limitation&comma; proprietary rights and ownership&comma; indemnification and
limitation of liability&rpar;&comma; which by their sense and context are intended
to survive such suspension&comma; termination or cancellation&period;
</p>
<p>
<strong>Disclaimers</strong>
<br>THE SERVICES&comma; HABITRPG CONTENT AND PUBLIC USER CONTENT ARE PROVIDED 'AS IS'&comma;
WITHOUT WARRANTY OF ANY KIND&comma; EITHER EXPRESS OR IMPLIED&period; WITHOUT
LIMITING THE FOREGOING&comma; HABITRPG EXPLICITLY DISCLAIMS ANY WARRANTIES OF
MERCHANTABILITY&comma; FITNESS FOR A PARTICULAR PURPOSE&comma; QUIET ENJOYMENT OR
NON-INFRINGEMENT&comma; AND ANY WARRANTIES ARISING OUT OF COURSE OF DEALING OR
USAGE OF TRADE&period;
</p>
<p>
HABITRPG MAKES NO WARRANTY THAT THE SERVICES&comma; HABITRPG CONTENT OR
PUBLIC USER CONTENT WILL MEET YOUR REQUIREMENTS OR BE AVAILABLE ON AN
UNINTERRUPTED&comma; SECURE&comma; OR ERROR-FREE BASIS&period; HABITRPG MAKES NO WARRANTY
REGARDING THE QUALITY OF ANY PRODUCTS&comma; SERVICES OR CONTENT PURCHASED OR
OBTAINED THROUGH THE SERVICES OR THE ACCURACY&comma; TIMELINESS&comma; TRUTHFULNESS&comma;
COMPLETENESS OR RELIABILITY OF ANY CONTENT OBTAINED THROUGH THE
SERVICES&period;
</p>
<p>
NO ADVICE OR INFORMATION&comma; WHETHER ORAL OR WRITTEN&comma; OBTAINED FROM
HABITRPG OR THROUGH THE SERVICES&comma; HABITRPG CONTENT OR PUBLIC USER CONTENT&comma; WILL
CREATE ANY WARRANTY NOT EXPRESSLY MADE HEREIN&period;
</p>
<p>
<strong>Indemnity</strong>
<br>You agree to defend&comma; indemnify&comma; and hold HabitRPG&comma; its officers&comma;
directors&comma; employees and agents&comma; harmless from and against any claims&comma;
liabilities&comma; damages&comma; losses&comma; and expenses&comma; including&comma; without
limitation&comma; reasonable legal and accounting fees&comma; arising out of or in
any way connected with Public User Content you submit to HabitRPG&comma; your access
to or use of the Services or HabitRPG Content&comma; or your violation of these
Terms of Service&period;
</p>
<p>
<strong>Limitation of Liability</strong>
<br>YOU ACKNOWLEDGE AND AGREE THAT&comma; TO THE MAXIMUM EXTENT PERMITTED BY LAW&comma;
THE ENTIRE RISK ARISING OUT OF YOUR ACCESS TO AND USE OF THE SERVICES
AND CONTENT THEREIN REMAINS WITH YOU&period; NEITHER HABITRPG NOR ANY OTHER
PARTY INVOLVED IN CREATING&comma; PRODUCING&comma; OR DELIVERING THE SERVICES OR
HABITRPG CONTENT WILL BE LIABLE FOR ANY INCIDENTAL&comma; SPECIAL&comma; EXEMPLARY OR
CONSEQUENTIAL DAMAGES&comma; INCLUDING LOST PROFITS&comma; LOSS OF DATA OR LOSS OF
GOODWILL&comma; SERVICE INTERRUPTION&comma; COMPUTER DAMAGE OR SYSTEM FAILURE OR THE
COST OF SUBSTITUTE PRODUCTS OR SERVICES&comma; ARISING OUT OF OR IN CONNECTION
WITH THESE TERMS OR FROM THE USE OF OR INABILITY TO USE THE SERVICES OR
CONTENT THEREIN&comma; WHETHER BASED ON WARRANTY&comma; CONTRACT&comma; TORT &lpar;INCLUDING
NEGLIGENCE&rpar;&comma; PRODUCT LIABILITY OR ANY OTHER LEGAL THEORY&comma; AND WHETHER OR
NOT HABITRPG HAS BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGE&comma; EVEN IF
A LIMITED REMEDY SET FORTH HEREIN IS FOUND TO HAVE FAILED OF ITS
ESSENTIAL PURPOSE&period; YOU SPECIFICALLY ACKNOWLEDGE THAT HABITRPG IS NOT
LIABLE FOR THE DEFAMATORY&comma; OFFENSIVE OR ILLEGAL CONDUCT OF OTHER USERS
OR THIRD PARTIES AND THAT THE RISK OF INJURY FROM THE FOREGOING RESTS
ENTIRELY WITH YOU&period; FURTHER&comma; HABITRPG WILL HAVE NO LIABILITY TO YOU OR TO
ANY THIRD PARTY FOR ANY PUBLIC USER CONTENT OR THIRD-PARTY CONTENT UPLOADED
ONTO OR DOWNLOADED FROM THE SITES OR THROUGH THE SERVICES&period;
</p>
<p>
IN NO EVENT WILL HABITRPG&apos;S AGGREGATE LIABILITY ARISING OUT OF OR
IN CONNECTION WITH THESE TERMS OF SERVICE OR FROM THE USE OF OR
INABILITY TO USE THE SITE&comma; SERVICES OR CONTENT THEREIN EXCEED ONE
HUNDRED U&period;S&period; DOLLARS &lpar;&dollar;100&rpar;&period; THE LIMITATIONS OF DAMAGES SET FORTH ABOVE
ARE FUNDAMENTAL ELEMENTS OF THE BASIS OF THE BARGAIN BETWEEN HABITRPG AND
YOU&period; SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF
LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES&comma; SO THE ABOVE
LIMITATION MAY NOT APPLY TO YOU&period;
</p>
<p>
<strong>Proprietary Rights Notices</strong>
<br>All trademarks&comma; service marks&comma; logos&comma; trade names and any other
proprietary designations of HabitRPG used herein are trademarks or
registered trademarks of HabitRPG&period; Any other trademarks&comma; service marks&comma;
logos&comma; trade names and any other proprietary designations are the
trademarks or registered trademarks of their respective parties&period;
</p>
<p>
<strong>Controlling Law and Jurisdiction</strong>
<br>These Terms of Service and any action related thereto will be governed
by the laws of the State of California without regard to its conflict of
laws provisions&period; The exclusive jurisdiction and venue of any action with
respect to the subject matter of these Terms of Service will be the
courts having jurisdiction over disputes arising in Santa Clara County&comma;
California&comma; and each of the parties hereto waives any objection to
jurisdiction and venue in such courts&period;
</p>
<p>
YOU AGREE THAT IF YOU WANT TO SUE US&comma; YOU MUST FILE YOUR LAWSUIT
WITHIN ONE YEAR AFTER THE EVENT THAT GAVE RISE TO YOUR LAWSUIT&period;
OTHERWISE&comma; YOUR LAWSUIT WILL BE PERMANENTLY BARRED&period;
</p>
<p>
<strong>Export Control</strong>
<br>You may not use or otherwise export or re-export the Services except as
authorized by United States law and the laws of the jurisdiction in
which the Services were obtained&period; In particular&comma; but without limitation&comma;
the Services may not be exported or re-exported &lpar;a&rpar; into any U&period;S&period;
embargoed countries or &lpar;b&rpar; to anyone on the U&period;S&period; Treasury Department&apos;s
list of Specially Designated Nationals or the U&period;S&period; Department of
Commerce Denied Person&apos;s List or Entity List&period; By using the Services&comma; you
represent and warrant that you are not located in any such country or on
any such list&period; You also agree that you will not use these products for
any purposes prohibited by United States law&comma; including&comma; without
limitation&comma; the development&comma; design&comma; manufacture or production of
nuclear&comma; missiles&comma; or chemical or biological weapons&period;
</p>
<p>
<strong>Entire Agreement</strong>
<br>These Terms of Service constitute the entire and exclusive understanding
and agreement between HabitRPG and you regarding the Services and HabitRPG
Content&comma; and these Terms of Service supersede and replace any and all
prior oral or written understandings or agreements between HabitRPG and
you regarding the Services and HabitRPG Content&period;
</p>
<p>
<strong>Assignment</strong>
<br>You may not assign or transfer these Terms of Service&comma; by operation of
law or otherwise&comma; without HabitRPG&apos;s prior written consent&period; Any attempt
by you to assign or transfer these Terms of Service&comma; without such
consent&comma; will be null and of no effect&period; HabitRPG may freely assign these
Terms of Service&period; Subject to the foregoing&comma; these Terms of Service will
bind and inure to the benefit of the parties&comma; their successors and
permitted assigns&period;
</p>
<p>
<strong>Notices</strong>
<br>You consent to the use of&colon; &lpar;i&rpar; electronic means to complete these Terms
of Service and to deliver any notices or other communications permitted
or required hereunder&semi; and &lpar;ii&rpar; electronic records to store information
related to these Terms of Service or your use of the Services&period; Any
notices or other communications permitted to required hereunder&comma;
including those regarding modifications to these Terms of Service&comma; will
be in writing and given&colon; &lpar;x&rpar; by HabitRPG via email &lpar;in each case to the
address that you provide&rpar; or &lpar;y&rpar; by posting to the Sites or Services&period;
For notices made by e-mail&comma; the date of receipt will be deemed the date
on which such notice is transmitted&period;
</p>
<p>
<strong>General</strong>
<br>The failure of HabitRPG to enforce any right or provision of these Terms
of Service will not constitute a waiver of future enforcement of that
right or provision&period; The waiver of any such right or provision will be
effective only if in writing and signed by a duly authorized
representative of HabitRPG&period; Except as expressly set forth in these Terms
of Service&comma; the exercise by either party of any of its remedies under
these Terms of Service will be without prejudice to its other remedies
under these Terms of Service or otherwise&period; If for any reason a court of
competent jurisdiction finds any provision of these Terms of Service
invalid or unenforceable&comma; that provision will be enforced to the maximum
extent permissible and the other provisions of these Terms of Service
will remain in full force and effect&period;
</p>
<p>
<strong>Contacting Us</strong>
<br>If you have any questions about these Terms of Service&comma; please contact
us at
<a href="mailto:admin@habitica.com">admin@habitica.com</a>
</p>
<p>If your account is terminated, you will no longer have access to it, including to any of the associated data or Content. You will not be entitled to any refunds and we will have no liability to you. We also reserve the right to terminate any other accounts you may have created, as well as access to any other HabitRPG Service (also without refunds or liability to you).</p>
<p>You understand and agree that using the Service comes with the risk that your account may be terminated or suspended at our discretion and at any time. Please keep this risk in mind and comport yourself appropriately.</p>
<h2>API</h2>
<p>You may access your Service data via the Application Program Interface ("API"). By using API you are automatically bound by the Agreement.</p>
<h2>Using Our Service</h2>
<p>You must follow any policies made available to you within the Service, including but not limited to the Terms of Service, Privacy Policy, and Community Guidelines. You may only use our Service as permitted by law. HabitRPG may investigate and/or suspend or terminate our Service to you at any time if we find your use of our Service violates the Terms and/or any policies.</p>
<p>Using our Service does not grant you ownership of any intellectual property rights in our Service or the content you may have access to. You may not use any copyrighted content in our Service unless you obtain permission from the content owner and/or are otherwise permitted by law. The Terms do not grant you the right to use any branding or logos used in our Service. Our Service may display some logos, trademarks, or branding materials that are not the property of HabitRPG. Such content is the sole responsibility of the entity that makes it available.</p>
<p>You may not abuse and/or misuse our Service, including but not limited to the following actions:</p>
<ul>
<li>Using the Service for any unlawful purposes or activities;</li>
<li>Uploading any content to the Service in violation of any applicable law, including but not limited to intellectual property laws and publicity laws;</li>
<li>Sending unsolicited promotions or advertisements;</li>
<li>Accessing or tampering with the Service's server systems;</li>
<li>Interfering with or disrupting the access of any user, host, or network;</li>
<li>Abusing or submitting excessively frequent requests to the Service via the API</li>
<li>Spamming chat, whether for personal or commercial purposes, by disrupting the flow of conversation with repeated postings;</li>
<li>Impersonating any person, business, or entity, including an employee of HabitRPG, or member of the Habitica moderation team, or communicating in any way that makes it appear that the communication originates from Habitica staff or HabitRPG;</li>
<li>Transmitting or communicating any content which, in the sole and exclusive discretion of HabitRPG, is deemed offensive, including language that is unlawful, harmful, threatening, abusive, harassing, defamatory, vulgar, obscene, sexually explicit, or racially, ethically, or otherwise objectionable,</li>
<li>Participating in any action which, in the sole and exclusive judgment of HabitRPG, defrauds any other user of the Game, including by scamming or social engineering; or</li>
<li>Inducing or encouraging others to violate the Community Guidelines or the Agreement.</li>
</ul>
<p>HabitRPG, in its sole discretion, will determine what constitutes abuse and/or misuse of our Service.</p>
<h2>Premium Service and Payments</h2>
<p>You may choose our free Service or paid Service ("Premium") depending on your needs. We do not guarantee when, if ever, Premium features will be available in the free Service. You may upgrade from free Service to Premium at any time by any of the following methods:</p>
<ul>
<li>Web: Selecting the user icon in the top right corner and selecting "Subscription" from the dropdown menu,</li>
<li>Web: Clicking the green gem icon in the navigation bar at the top of the screen and following instructions to Subscribe or Buy Gems,</li>
<li>Android: Tap the menu icon in the top left corner of the main screen and select "Gems & Subscription". Follow the instructions to make a purchase.</li>
<li>iOS: Tap the menu icon in the lower right and select "Gems & Subscriptions". Follow the instructions to make a purchase.</li>
</ul>
<p>You will be charged the amount shown on Pricing before you can access Premium Service. All prices shown on Pricing are inclusive of any applicable sales taxes, levies, value-added taxes, or duties imposed by taxing authorities, and you are responsible for payment of all such taxes, levies, or duties. We may revise the Pricing at any time and may, from time to time, modify, amend, or supplement our fees and fee-billing methods. Such changes shall be effective upon posting on the Pricing page or elsewhere in the Service. If there is a dispute regarding payment of fees to us, we reserve the right to terminate or suspend your account at our sole discretion.</p>
<p>BY PURCHASING PREMIUM YOU EXPRESSLY UNDERSTAND AND AGREE TO OUR REFUND POLICY:</p>
<p>WITHIN THIRTY (30) DAYS OF YOUR PREMIUM PAYMENT DATE AS SHOWN ON YOUR PAYMENT BILL, YOU CAN REQUEST A FULL REFUND BY CONTACTING US AT ADMIN@HABITICA.COM. AFTER THIRTY (30) DAYS OF YOUR PREMIUM PAYMENT DATE, ANY PAYMENT REFUND IS SOLELY SUBJECT TO OUR DISCRETION. THE REFUND SHALL BE YOUR SOLE AND EXCLUSIVE REMEDY.</p>
<p>FOR ANY CUSTOMER WHO PURCHASED PREMIUM IN APPLE INC.'s APP STORE ("APP STORE"), PLEASE CONTACT APPLE INC.'s SUPPORT TEAM: <a href="http://reportaproblem.apple.com" target="_blank">http://reportaproblem.apple.com</a>. APPLE'S APP STORE DOES NOT ALLOW DEVELOPERS TO ISSUE REFUND FOR APP STORE PURCHASES MADE BY CUSTOMERS.</p>
<h2>Warranty Disclaimer</h2>
<p>THE SERVICE AND ANY CONTENT MADE AVAILABLE BY HABITRPG VIA THE SERVICE IS PROVIDED "AS IS" AND "AS AVAILABLE" WITHOUT ANY WARRANTIES OF ANY KIND, INCLUDING, WITHOUT LIMITATION, THAT THE SERVICE OR CONTENT WILL OPERATE ERROR-FREE OR THAT THE SERVICE OR CONTENT OR ITS SERVERS ARE FREE OF COMPUTER VIRUSES OR SIMILAR CONTAMINATION OR DESTRUCTIVE FEATURES.</p>
<p>WE DISCLAIM ALL WARRANTIES, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF TITLE, MERCHANTABILITY, NON-INFRINGEMENT OF THIRD PARTIES' RIGHTS, AND FITNESS FOR PARTICULAR PURPOSE AND ANY WARRANTIES ARISING FROM A COURSE OF DEALING, COURSE OF PERFORMANCE, OR USAGE OF TRADE.</p>
<p>WE RESERVE THE RIGHT TO MAKE CHANGES, CORRECTIONS, AND/OR IMPROVEMENTS TO THE SERVICE OR THE CONTENT AT ANY TIME WITHOUT NOTICE.</p>
<p>IN CONNECTION WITH ANY WARRANTY, CONTRACT, OR COMMON LAW TORT CLAIMS: (I) WE AND OUR LICENSORS SHALL NOT BE LIABLE FOR ANY INCIDENTAL OR CONSEQUENTIAL DAMAGES, LOST PROFITS, OR DAMAGES RESULTING FROM LOST DATA OR BUSINESS INTERRUPTION RESULTING FROM THE USE OR INABILITY TO ACCESS AND USE THE SERVICE OR CONTENT POSTED BY HABITPRG, EVEN IF WE HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES; AND (II) ANY DIRECT DAMAGES THAT YOU MAY SUFFER AS A RESULT OF YOUR USE OF THE PLATFORM SHALL BE LIMITED TO THE GREATER OF (I) MONIES YOU HAVE PAID US IN CONNECTION WITH YOUR USE OF THE PLATFORM DURING THE TWELVE (12) MONTHS IMMEDIATELY PRECEDING THE EVENTS GIVING RISE TO THE CLAIM, OR (II) ONE HUNDRED US DOLLARS ($100).</p>
<p>SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF CERTAIN WARRANTIES. THEREFORE, SOME OF THE ABOVE LIMITATIONS ON WARRANTIES IN THIS SECTION MAY NOT APPLY TO YOU. NOTHING IN THIS AGREEMENT SHALL AFFECT ANY NON-WAIVABLE STATUTORY RIGHTS THAT APPLY TO YOU.</p>
<h2>Indemnification</h2>
<p>You agree to defend, indemnify, and hold us and our officers, directors, employees, agents, successors, licensees, licensors, and assigns harmless from and against any damages, liabilities, losses, expenses, claims, actions, and/or demands, including, without limitation, reasonable legal and accounting fees, arising or resulting from: (i) your breach of any of your representations, warranties or other obligations under this Agreement; (ii) your use or misuse of the Service or content posted or made available by HabitRPG; and/or (iii) your violation of any third-party rights, including without limitation any copyright, trademark, property, publicity, or privacy right. We shall provide notice to you of any such claim, suit, or proceeding and shall assist you, at your expense, in defending any such claim, suit, or proceeding. We reserve the right to assume the exclusive defense and control (at your expense) of any matter that is subject to indemnification under this section. In such case, you agree to cooperate with any reasonable requests assisting our defense of such matter.</p>
<h2>Compliance with Applicable Laws</h2>
<p>The Service is based in the United States. We make no claims concerning whether the Service or posted content may be downloaded, viewed, or be appropriate for use outside of the United States. If you access the Service or such content from outside of the United States, you do so at your own risk. Whether inside or outside of the United States, you are solely responsible for ensuring compliance with the laws of your specific jurisdiction.</p>
<h2>Binding Arbitration</h2>
<p>In the event of a dispute arising under or relating to this Agreement or the Service (each, a "<u>Dispute</u>"), such dispute will be finally and exclusively resolved by binding arbitration governed by the Federal Arbitration Act ("<u>FAA</u>"). Any election to arbitrate, at any time, shall be final and binding on the other party. NEITHER PARTY SHALL HAVE THE RIGHT TO LITIGATE SUCH CLAIM IN COURT OR TO HAVE A JURY TRIAL, EXCEPT EITHER PARTY MAY BRING ITS CLAIM IN ITS LOCAL SMALL CLAIMS COURT, IF PERMITTED BY THAT SMALL CLAIMS COURT RULES AND IF WITHIN SUCH COURT'S JURISDICTION. ARBITRATION IS DIFFERENT FROM COURT, AND DISCOVERY AND APPEAL RIGHTS MAY ALSO BE LIMITED IN ARBITRATION. All disputes will be resolved before a neutral arbitrator selected jointly by the parties, whose decision will be final, except for a limited right of appeal under the FAA. The arbitration shall be commenced and conducted by JAMS pursuant to its then current Comprehensive Arbitration Rules and Procedures and in accordance with the Expedited Procedures in those rules, or, where appropriate, pursuant to JAMS' Streamlined Arbitration Rules and Procedures. All applicable JAMS' rules and procedures are available at the JAMS website <a href="https://www.jamsadr.com" target="_blank">www.jamsadr.com</a>. Each party will be responsible for paying any JAMS filing, administrative, and arbitrator fees in accordance with JAMS rules. Judgment on the arbitrator's award may be entered in any court having jurisdiction. This clause shall not preclude parties from seeking provisional remedies in aid of arbitration from a court of appropriate jurisdiction. The arbitration may be conducted in person, through the submission of documents, by phone, or online. If conducted in person, the arbitration shall take place in the United States county where you reside. The parties may litigate in court to compel arbitration, to stay a proceeding pending arbitration, or to confirm, modify, vacate, or enter judgment on the award entered by the arbitrator. The parties shall cooperate in good faith in the voluntary and informal exchange of all non-privileged documents and other information (including electronically stored information) relevant to the Dispute immediately after commencement of the arbitration. As set forth below, nothing in this Agreement will prevent us from seeking injunctive relief in any court of competent jurisdiction as necessary to protect our proprietary interests.</p>
<p>ANY CLAIMS, ACTIONS OR PROCEEDINGS BY YOU MUST BE COMMENCED WITHIN ONE YEAR AFTER THE EVENT THAT GAVE RISE TO YOUR CLAIM OCCURS. ALL OTHER CLAIMS YOU MAY HAVE ARE PERMANENTLY BARRED.</p>
<h2>Class Action Waiver</h2>
<p>You agree that any arbitration or proceeding shall be limited to the Dispute between us and you individually. To the full extent permitted by law, (i) no arbitration or proceeding shall be joined with any other; (ii) there is no right or authority for any Dispute to be arbitrated or resolved on a class action-basis or to utilize class action procedures; and (iii) there is no right or authority for any Dispute to be brought in a purported representative capacity on behalf of the general public or any other persons. YOU AGREE THAT YOU MAY BRING CLAIMS AGAINST US ONLY IN YOUR INDIVIDUAL CAPACITY AND NOT AS A PLAINTIFF OR CLASS MEMBER IN ANY PURPORTED CLASS OR REPRESENTATIVE PROCEEDING.</p>
<h2>Equitable Relief</h2>
<p>You acknowledge and agree that in the event of a breach or threatened violation of our intellectual property rights and confidential and proprietary information by you, we will suffer irreparable harm and will therefore be entitled to injunctive relief to enforce this Agreement. We may, without waiving any other remedies under this Agreement, seek from any court having jurisdiction any interim, equitable, provisional, or injunctive relief that is necessary to protect our rights and property pending the outcome of the arbitration referenced above.</p>
<h2>Contact Us</h2>
<p>If you have any questions about the Agreement, or want to report a violation (including DMCA take-down notices relating to infringement of copyright) please contact us at <a href="mailto:admin@habitica.com">admin@habitica.com</a>.</p>
<h2>Miscellaneous</h2>
<p>This Agreement and any action related thereto will be governed by the laws of the State of California without regard to its conflict of laws provisions. Our failure to act on or enforce any provision of this Agreement shall not be construed as a waiver of that provision or any other provision therein. No waiver shall be effective against us unless made in writing, and no such waiver shall be construed as a waiver in any other or subsequent instance. Except as expressly agreed by us and you in writing, this Agreement constitutes the entire agreement between you and us with respect to the subject matter, and supersedes all previous or contemporaneous agreements, whether written or oral, between the parties with respect to the subject matter. The section headings are provided merely for convenience and shall not be given any legal import. This Agreement will inure to the benefit of our successors, assigns, licensees, and sublicensees.</p>
</div>
<!-- eslint-enable max-len -->
</template>
+8
View File
@@ -0,0 +1,8 @@
export const PAGES = {
PRIVATE_MESSAGES: '/private-messages',
};
export const MODALS = {
BUG_REPORT: 'bug-report-modal',
BUG_REPORT_SUCCESS: 'bug-report-success-modal',
};
+4 -29
View File
@@ -1,34 +1,9 @@
import { mapState } from '@/libs/store';
import { MODALS } from '@/libs/consts';
export default {
computed: {
...mapState({ user: 'user.data' }),
bugReportMailto () {
let subscriptionInfo = 'Not Subscribed';
if (!this.user) {
return 'mailto:admin@habitica.com?subject=Habitica Web Bug Report';
}
if (this.user.purchased.plan.customerId) {
subscriptionInfo = `
Subscription: ${this.user.purchased.plan.planId}%0d%0a
Payment Platform: ${this.user.purchased.plan.paymentMethod}%0d%0a
Customer ID: ${this.user.purchased.plan.customerId}%0d%0a
Consecutive Months: ${this.user.purchased.plan.consecutive.count}%0d%0a
Offset Months: ${this.user.purchased.plan.consecutive.offset}%0d%0a
Mystic Hourglasses: ${this.user.purchased.plan.consecutive.trinkets}
`;
}
return `mailto:admin@habitica.com?subject=Habitica Web Bug Report&body=
Please describe the issue you encountered:%0d%0a%0d%0a
User ID: ${this.user._id}%0d%0a
Level: ${this.user.stats.lvl}%0d%0a
Class: ${this.user.stats.class}%0d%0a
Dailies Paused: ${this.user.preferences.sleep}%0d%0a
Uses Costume: ${this.user.preferences.costume}%0d%0a
Custom Day Start: ${this.user.preferences.dayStart}%0d%0a
Timezone Offset: ${this.user.preferences.timezoneOffset}%0d%0a
${subscriptionInfo}
`;
methods: {
openBugReportModal () {
this.$root.$emit('bv::show::modal', MODALS.BUG_REPORT);
},
},
};
+2 -1
View File
@@ -4,6 +4,7 @@ import getStore from '@/store';
import handleRedirect from './handleRedirect';
import ParentPage from '@/components/parentPage';
import { PAGES } from '@/libs/consts';
// NOTE: when adding a page make sure to implement setTitle
@@ -201,7 +202,7 @@ const router = new VueRouter({
},
],
},
{ path: '/private-messages', name: 'privateMessages', component: MessagesIndex },
{ path: PAGES.PRIVATE_MESSAGES, name: 'privateMessages', component: MessagesIndex },
{
name: 'challenges',
path: '/challenges',
+10 -3
View File
@@ -54,7 +54,7 @@
"shops": "Obchody",
"custom": "Vlastní",
"wishlist": "Seznam přání",
"wrongItemType": "Item typu \"<%= type %>\" není platný.",
"wrongItemType": "Předmět typu \"<%= type %>\" není platný.",
"wrongItemPath": "Cesta k předmětu \"<%= path %>\" je nesprávná.",
"unpinnedItem": "Odepnul jsi <%= item %>! Nebude se nadále zobrazovat ve tvém sloupci odměn.",
"cannotUnpinArmoirPotion": "Lektvar zdraví a Začarovanou almaru nelze odepnout.",
@@ -94,7 +94,7 @@
"classGearText": "Gratuluji k vybrání povolání! Přidal jsem ti základní zbraň do tvého inventáře. Podívej se dolů a vybav se!",
"autoAllocate": "Připisovat automaticky",
"spells": "Dovednosti",
"skillsTitle": "Dovednosti",
"skillsTitle": "<%= classStr %> Dovednosti",
"toDo": "úkol",
"tourStatsPage": "Tohle je stránka s tvými statistikami! Získej ocenění za splnění vyjmenovaných úkolů.",
"tourTavernPage": "Vítej v Krčmě, chatu pro všechny věkové kategorie! V případě nemoci, nebo třeba dovolené, se můžeš ochránit proti zranění za nesplněné Denní úkoly kliknutím na \"Pauznout poškození\". Přijď nás pozdravit!",
@@ -123,5 +123,12 @@
"paymentAutoRenew": "Toto předplatné se automaticky obnoví, dokud nebude zrušeno. Pokud potřebujete předplatné zrušit, můžete tak učinit z nastavení.",
"cannotUnpinItem": "Tuto položku nelze odepnout.",
"paymentSubBillingWithMethod": "Tvé předplatné <strong>$<%= amount %> bude účtováno </strong> každé/CZ <strong><%= months %> měsíce/ů </strong> skrze <strong><%= paymentMethod %></strong>.",
"invalidUnlockSet": "Tento set předmětů je prošlý a nemůže být odemčen."
"invalidUnlockSet": "Tento set předmětů je prošlý a nemůže být odemčen.",
"amountExp": "<%= amount %> Zk",
"limitedAvailabilityDays": "K získání na <%= dny %>d <%= hodin%>h <%= minut %>m",
"nGemsGift": "<%= nGems %> Drahokamy (Dárek)",
"nMonthsSubscriptionGift": "<%= nMonths %> Měsíční odběr (Dárek)",
"nGems": "<%= nGems %> Drahokamy",
"limitedAvailabilityHours": "K získání na <%= hodin %>h <%= minut %>m",
"limitedAvailabilityMinutes": "K získání na <%= minut %>m <%= sekund %>s"
}
+7 -7
View File
@@ -6,7 +6,7 @@
"spellWizardEarthText": "Zemětřesení",
"spellWizardEarthNotes": "Tvá psychická síla otřásá zemí a tvá družina získává bonus k Inteligenci! (Vypočteno na základě: INT před bonusem)",
"spellWizardFrostText": "Ledový mráz",
"spellWizardFrostNotes": "S jedním sesláním kouzla led zmrazil všechny tvé série, takže se žádná zítra nezresetuje na 0! ",
"spellWizardFrostNotes": "S jedním sesláním kouzla led zmrazil všechny tvé série, takže se žádná zítra nezresetuje na 0!",
"spellWizardFrostAlreadyCast": "Toto kouzlo už jsi dnes seslal. Tvé série jsou zmraženy a tak není důvod sesílat tohle kouzlo znovu.",
"spellWarriorSmashText": "Brutální rána",
"spellWarriorSmashNotes": "Úkoly ti více zmodrají/méně zčervenají, a uštědříš extra poškození Bossům! (Vypočteno na základě: SÍL)",
@@ -16,11 +16,11 @@
"spellWarriorValorousPresenceNotes": "Tvá odvaha přidá bonus k Síle celé tvé družině! (Vypočteno na základě: SÍL před bonusem)",
"spellWarriorIntimidateText": "Zastrašující pohled",
"spellWarriorIntimidateNotes": "Tvůj nebojácný pohled přidá bonus k Obraně celé tvé družiny! (Vypočteno na základě: OBR před bonusem)",
"spellRoguePickPocketText": "Vybrat kapsy",
"spellRoguePickPocketText": "Kapsář",
"spellRoguePickPocketNotes": "Okradeš blízký úkol a získáš zlato! (Vypočteno na základě: VNM)",
"spellRogueBackStabText": "Kudla do zad",
"spellRogueBackStabNotes": "Podvedeš naivní úkol a získáš zlato a zkušenosti! (Vypočteno na základě: SÍL)",
"spellRogueToolsOfTradeText": "Nástroje k obchodování",
"spellRogueToolsOfTradeText": "Nástroje obchodu",
"spellRogueToolsOfTradeNotes": "Tvé lstivé talenty přidají bonus celé tvé družině k Vnímání! (Vypočteno na základě: VNM před bonusem)",
"spellRogueStealthText": "Plížení",
"spellRogueStealthNotes": "S každým sesláním kouzla ti pár z tvých nesplněných úkolů dnes v noci neublíží. Jejich série a barva zůstane nezměněna. (Vypočteno na základě: VNM)",
@@ -31,7 +31,7 @@
"spellHealerBrightnessText": "Spalující záře",
"spellHealerBrightnessNotes": "Záblesk světla změní tvé úkoly na více modré/méně červené! (Vypočteno na základě: INT)",
"spellHealerProtectAuraText": "Ochranná aura",
"spellHealerProtectAuraNotes": "Zaštítíš tvoji družinu tím, že jim přidáš bonus k jejich Obraně! (Vypočteno na základě: OBR před bonusem)",
"spellHealerProtectAuraNotes": "Zaštítíš tvoji družinu přidáním bonusu k jejich Obraně! (Vypočteno na základě: OBR před bonusem)",
"spellHealerHealAllText": "Požehnání",
"spellHealerHealAllNotes": "Tvé uklidňující kouzlo obnovuje celé tvé družině zdraví! (Vypočteno na základě: OBR a INT)",
"spellSpecialSnowballAuraText": "Sněhová koule",
@@ -51,10 +51,10 @@
"spellSpecialSandText": "Písek",
"spellSpecialSandNotes": "Zvrať kouzlo, které z tebe udělalo mořskou hvězdu.",
"partyNotFound": "Družina nenalezena",
"targetIdUUID": "„ targetId\" musí být platné ID uživatele.",
"targetIdUUID": "„targetId\" musí být platné ID uživatele.",
"challengeTasksNoCast": "Použití schopnosti na úkol z výzvy není povoleno.",
"groupTasksNoCast": "Používání schopností na skupinové úkoly není povoleno.",
"spellNotOwned": "Nevlastníte tuto schopnost.",
"spellLevelTooHigh": "Pro použití této schopnosti musíte být úroveň <%= level %>.",
"spellNotOwned": "Nevlastníš tuto schopnost.",
"spellLevelTooHigh": "Pro použití této schopnosti musíš být úroveň <%= level %>.",
"spellAlreadyCast": "Použití této dovednosti nebude mít žádný další efekt."
}
+8 -1
View File
@@ -653,5 +653,12 @@
"backgroundSpiralStaircaseText": "Wendeltreppe",
"backgrounds112021": "Set 90: Veröffentlicht im November 2021",
"backgroundSpiralStaircaseNotes": "Steige auf, ab, immer rundherum auf einer Wendeltreppe.",
"backgroundFortuneTellersShopNotes": "Spüre verlockende Hinweise auf Deine Zukunft im Wahrsager-Laden auf."
"backgroundFortuneTellersShopNotes": "Spüre verlockende Hinweise auf Deine Zukunft im Wahrsager-Laden auf.",
"backgroundWinterCanyonShopNotes": "Wage ein Abenteuer in einer winterlichen Schlucht!",
"backgroundIcePalaceShopText": "Eispalast",
"backgroundFrozenPolarWatersText": "Gefrorene Polargewässer",
"backgroundFrozenPolarWatersNotes": "Erforsche gefrorene Polargewässer.",
"backgrounds122021": "Set 91: Veröffentlicht im Dezember 2021",
"backgroundWinterCanyonShopText": "Winterliche Schlucht",
"backgroundIcePalaceShopNotes": "Herrsche in einem Eispalast."
}
@@ -32,7 +32,7 @@
"commGuidePara031": "Einige öffentlichen Gilden werden sensible Themen wie Depressionen, Religion, Politik usw. enthalten. Dies ist in Ordnung, solange die Gespräche darin nicht gegen die Allgemeinen Geschäftsbedingungen oder die Regeln des öffentlichen Raums verstoßen und solange sie beim Thema bleiben.",
"commGuidePara033": "<strong>Öffentliche Gilden dürfen KEINE Inhalte \"ab 18\" enthalten. Wenn geplant ist, regelmäßig über sensible Inhalte zu diskutieren, sollte dies in der Gildenbeschreibung angegeben werden</strong>. Auf diese Weise soll Habitica sicher und angenehm für alle sein.",
"commGuidePara035": "<strong>Wenn die betreffende Gilde verschiedene Arten von heiklen Themen hat, ist es respektvoll gegenüber Deinen Habiticanern, eine Warnung vor Deinen Kommentar zu stellen (z.B. \"Warnung: erwähnt Selbstverletzung\")</strong>. Diese können als Triggerwarnungen und/oder Inhaltshinweise bezeichnet werden, und Gilden können zusätzlich zu den hier angegebenen Regeln eigene Regeln haben. Wenn möglich, verwende bitte <a href='https://habitica.fandom.com/wiki/Markdown_Cheat_Sheet' target='_blank'>Markdown</a> um die potenziell heiklen Inhalte unterhalb von Zeilenumbrüchen auszublenden, damit diejenigen, die sie nicht lesen möchten, darüber hinweg scrollen können, ohne den Inhalt zu sehen. Mitarbeiter und Moderatoren von Habitica können dieses Material nach eigenem Ermessen trotzdem entfernen.",
"commGuidePara036": "Außerdem sollte das heikle Material themenrelevant sein Selbstverletzung in einer Gilde ansprechen, die sich auf die Bekämpfung von Depressionen konzentriert, kann sinnvoll sein, ist aber in einer Musikgilde wahrscheinlich weniger angebracht. Wenn Du jemanden siehst, der wiederholt gegen diese Richtlinie verstößt, insbesondere nach mehreren Anfragen, markiere bitte die Beiträge und benachrichtige unsere Community Manager über <a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a>.",
"commGuidePara036": "Außerdem sollte das heikle Material themenrelevant sein Selbstverletzung in einer Gilde ansprechen, die sich auf die Bekämpfung von Depressionen konzentriert, kann sinnvoll sein, ist aber in einer Musikgilde wahrscheinlich weniger angebracht. Wenn Du jemanden siehst, der wiederholt gegen diese Richtlinie verstößt, insbesondere nach mehreren Anfragen, melde bitte die Beiträge.",
"commGuidePara037": "<strong>Es sollte niemals eine Gilde, egal ob öffentlich oder privat, gegründet werden, die als Ziel hat, ein Individuum oder eine Gruppe anzugreifen</strong>. So eine Gilde zu erstellen führt zu einer sofortigen Accountsperre. Bekämpfe schlechte Angewohnheiten, nicht Deine Mitabenteurer!",
"commGuidePara038": "<strong>Alle Tavernen-Herausforderungen und Herausforderungen öffentlicher Gilden müssen sich ebenfalls an diese Regeln halten</strong>.",
"commGuideHeadingInfractionsEtc": "Regelverletzungen, Konsequenzen und Wiederherstellung",
+2 -1
View File
@@ -369,5 +369,6 @@
"hatchingPotionMossyStone": "Moosbedeckter Stein",
"hatchingPotionSunset": "Sonnenuntergang",
"hatchingPotionSolarSystem": "Sonnensystem",
"hatchingPotionMoonglow": "Mondschein"
"hatchingPotionMoonglow": "Mondschein",
"hatchingPotionOnyx": "Onyx"
}
+3 -1
View File
@@ -2490,5 +2490,7 @@
"headSpecialFall2021HealerNotes": "Deine eigene Magie lässt deine Haare zu schockierenden, hellen Flammen werden, wenn du diese Maske aufsetzt. Erhöht Intelligenz um <%= int %>. Limitierte Ausgabe 2021 Herbstausrüstung.",
"weaponArmoireSkullLanternText": "Totenkopflaterne",
"weaponArmoireSkullLanternNotes": "Lasse ihr Leuchten deinen Weg durch die tiefste Finsternis erhellen. Erhöht Intelligenz um <%= int %>. Verzauberter Schrank:Unabhängiger Gegenstand.",
"offHandCapitalized": "Schildhand-Gegenstand"
"offHandCapitalized": "Schildhand-Gegenstand",
"armorMystery202112Text": "Antarktischer Nixenschwanz",
"armorMystery202112Notes": "Gleite mit diesem schimmerden Schwanz durch eisige Gewässser ohne jegliche Kälte zu spühren. Gewährt keinen Attributbonus. Dezember 2021 Abonnentengegenstand."
}
+9 -1
View File
@@ -736,5 +736,13 @@
"questSolarSystemBoss": "Ablenkungsartige",
"questSolarSystemText": "Eine Reise von kosmischer Konzentration",
"questSolarSystemNotes": "Deine Party reist durch das Universum, bestaunt es aus einem fantastischen Luftschiff heraus, das der talentierte Weltraumingenieur @gawrone entworfen hat. Sein meditativer Antrieb vertraut auf die Ruhe Deiner Party, um nicht vom Kurs abzukommen.<br><br>Geradeaus, in den Wolken funkelnder Galaxien, entdeckst Du einen bedrohlich pulsierenden Stern. \"Bleibt konzentriert\", warnt @beffymaroo. \"Wenn wir uns zu sehr ablenken lassen, während wir durch diese Nova fliegen, könnte uns die Sogwirkung zwischen dem Stern und unserem Schiff vom Kurs abbringen!\"<br><br>Als ihr euch dem Stern nähert, kommen dem Schiff pulsierende, seltsame Energien entgegen.<br><br>\"Das sind Ablenkungsartige, Gedankengeschöpfe, die uns in die Irre führen wollen\", sagt @SabreCat. \"Wenn wir es schaffen, sie vorbeischweben zu lassen, ohne uns wegzutragen, sollten wir unser Ziel im Blick behalten können!\"",
"questSolarSystemCompletion": "Mit viel Sorgfalt schaffen es Du und Deine Bande, die Ablenkungsartigen davon abzuhalten, euch über Bord zu werfen, einfach, indem ihr sie bemerkt und zur Kenntnis nehmt, ohne ihnen die Oberhand zu gewähren. Als ihr unversehrt am pulsierenden Stern vorbeikommt, bemerkt @gawrone eine Ansammlung von schwebenden Flaschen und zieht sie an Bord. Jede scheint ein eigenes winziges Sonnensystem zu beinhalten!<br><br>\"Oh, es sieht so aus, als hätte uns unsere harte Arbeit herrliche Belohnungen eingebracht!\", sagt @beffymaroo. \"Lasst uns sehen, welche himmlischen Wunder uns erwarten, wenn wir Haustier-Eier mit diesen neuen Elixieren ausbrüten.\""
"questSolarSystemCompletion": "Mit viel Sorgfalt schaffen es Du und Deine Bande, die Ablenkungsartigen davon abzuhalten, euch über Bord zu werfen, einfach, indem ihr sie bemerkt und zur Kenntnis nehmt, ohne ihnen die Oberhand zu gewähren. Als ihr unversehrt am pulsierenden Stern vorbeikommt, bemerkt @gawrone eine Ansammlung von schwebenden Flaschen und zieht sie an Bord. Jede scheint ein eigenes winziges Sonnensystem zu beinhalten!<br><br>\"Oh, es sieht so aus, als hätte uns unsere harte Arbeit herrliche Belohnungen eingebracht!\", sagt @beffymaroo. \"Lasst uns sehen, welche himmlischen Wunder uns erwarten, wenn wir Haustier-Eier mit diesen neuen Elixieren ausbrüten.\"",
"questOnyxNotes": "@Vikte, @aspiring_advocate und @starsystemic wissen das du dich in letzter Zeit unmotiviert fühlst, und haben sich gedacht, das ein spaßiger Tag deine Stimmung vielleicht wieder hebt. \"spaßig\" heißt hier aber, auf ein tiefsee Tauchabenteuer zu gehen und in der dunklen Gletscherspalte nach Schätzen zu suchen. Du ziehst deine Tauchausrüstung an, besteigst dein Boot, und ruderst in Richtung der antiken Stadt Dilatory. Auf dem weg fragst du sie, nach welcher art von Schatz du suchen sollst.<br><br>\"Pluto Runen!\" ruft @Vikte.<br><br>\"Nein, Leo Runen!\" ruft @aspiring_advocate.<br><br>\"Nein, Onyx Steine!\" ruft @starsystemic.<br><br>Während sie miteinander diskutieren, schaust du in den Ozean, und siehst den Höhleneingang direkt unter dir! Aufgeregt springst du ins Wasser, tauchst hinab, und lässt das Trio zurück das dir hinterher schaut, während du direkt in Richtung Eingang tauchst, um selbst nach den Schätzen zu suchen.",
"questOnyxText": "Die Onyx Odyssee",
"questOnyxCompletion": "Als du in die Höhle hineintauchst, schießen Fangschreckenkrebse die dort zu wohnen scheinen und die du anscheinend verschreckt hast, davon. Sie kehren aber schnell wieder zurück, tragen nun aber farbige Kugeln bei sich. Schnell realisierst du, das diese Kugeln die Schätze sein müssen, von denen das Trio sprach! Du packst dir eine ausreichende Menge von jedem Typ ein, verabschiedest dich von den Krebsen, und tauchst zurück zur Oberfläche. Dort helfen dir die anderen aufs Boot.<br><br>\"Wo warst du?\" fragt @Vikte. Als Antwort zeigst du ihnen nur die Kugeln die du gesammelt hast.<br><br>\"Mit diesen Zutaten kann man Magische Onyx Schlüpfelixiere herstellen!\", sagt @aspiring_advocate aufgeregt während ihr zurück zur Küste fahrt.<br><br>\"Also... können wir Onyx Hautiere züchten!\" sagt @starsystemic mit einem breiten grinsen auf dem Gesicht. \"Haben wir nicht gesagt das dieses Abenteuer spaßig wird?\"<br><br>Du grinst zurück, gespannt auf die neuen Haustiere, und bereit deine Aufgaben abzuschließen!",
"questOnyxCollectPlutoRunes": "Pluto Runen",
"questOnyxCollectLeoRunes": "Leo Runen",
"questOnyxCollectOnyxStones": "Onyx Steine",
"questOnyxDropOnyxPotion": "Onyx Schlüpfelixier",
"questOnyxUnlockText": "Schaltet das Onyx Schlüpfelixier zum Kauf auf dem Marktplatz frei"
}
+2 -1
View File
@@ -198,5 +198,6 @@
"mysterySet202109": "Mondschmetterlings-Set",
"mysterySet202108": "Feuriges Shōnen Set",
"mysterySet202110": "Moosbewachsenes Wasserspeier Set",
"mysterySet202111": "Kosmisches Zeitzauberei Set"
"mysterySet202111": "Kosmisches Zeitzauberei Set",
"mysterySet202112": "Antarktisches Undinen Set"
}
+4 -4
View File
@@ -739,10 +739,10 @@
"backgroundSpiralStaircaseNotes": "Climb up, down, round and round a Spiral Staircase.",
"backgrounds122021": "SET 91: Released December 2021",
"backgroundWinterCanyonShopText": "Winter Canyon",
"backgroundWinterCanyonShopNotes": "Adventure in a Winter Canyon!",
"backgroundIcePalaceShopText": "Ice Palace",
"backgroundIcePalaceShopNotes": "Reign in the Ice Palace.",
"backgroundWinterCanyonText": "Winter Canyon",
"backgroundWinterCanyonNotes": "Adventure in a Winter Canyon!",
"backgroundIcePalaceText": "Ice Palace",
"backgroundIcePalaceNotes": "Reign in the Ice Palace.",
"backgroundFrozenPolarWatersText": "Frozen Polar Waters",
"backgroundFrozenPolarWatersNotes": "Explore Frozen Polar Waters.",
+32
View File
@@ -416,6 +416,15 @@
"weaponSpecialFall2021HealerText": "Summoning Wand",
"weaponSpecialFall2021HealerNotes": "Use this wand to summon healing flames and a ghostly creature to help you. Increases Intelligence by <%= int %>. Limited Edition 2021 Autumn Gear.",
"weaponSpecialWinter2022RogueText": "Shooting Star Firework",
"weaponSpecialWinter2022RogueNotes": "Silver and gold are beloved of Rogues, right? These are totally on theme. Increases Strength by <%= str %>. Limited Edition 2021-2022 Winter Gear.",
"weaponSpecialWinter2022WarriorText": "Candy Cane Sword",
"weaponSpecialWinter2022WarriorNotes": "How many licks does it take to sharpen this candy cane into the perfect sword? Increases Strength by <%= str %>. Limited Edition 2021-2022 Winter Gear.",
"weaponSpecialWinter2022MageText": "Pomegranate Staff",
"weaponSpecialWinter2022MageNotes": "The berries on this staff contain an ancient magic to be wielded in winter. Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2021-2022 Winter Gear.",
"weaponSpecialWinter2022HealerText": "Crystalline Ice Wand",
"weaponSpecialWinter2022HealerNotes": "Touch this solid-water implement to a friend's neck and they'll jump out of their chair! But they'll feel better afterward. Hopefully.Increases Intelligence by <%= int %>. Limited Edition 2021-2022 Winter Gear.",
"weaponMystery201411Text": "Pitchfork of Feasting",
"weaponMystery201411Notes": "Stab your enemies or dig in to your favorite foods - this versatile pitchfork does it all! Confers no benefit. November 2014 Subscriber Item.",
"weaponMystery201502Text": "Shimmery Winged Staff of Love and Also Truth",
@@ -996,6 +1005,15 @@
"armorSpecialFall2021HealerText": "Summoner's Robes",
"armorSpecialFall2021HealerNotes": "Made of durable, flame-resistant fabric, these robes are perfect to wear when conjuring healing flames. Increases Constitution by <%= con %>. Limited Edition 2021 Autumn Gear.",
"armorSpecialWinter2022RogueText": "Dazzling Explosion",
"armorSpecialWinter2022RogueNotes": "If they're seeing stars, they're not seeing you! Yes, let's go with that. Increases Perception by <%= per %>. Limited Edition 2021-2022 Winter Gear.",
"armorSpecialWinter2022WarriorText": "Fuzzy Stocking",
"armorSpecialWinter2022WarriorNotes": "Who says you cant be snug and cozy while doing battle with everyday tasks? Increases Constitution by <%= con %>. Limited Edition 2021-2022 Winter Gear.",
"armorSpecialWinter2022MageText": "Pomegranate Protection",
"armorSpecialWinter2022MageNotes": "Enemies should watch out for fruit juice stains when you approach! Increases Intelligence by <%= int %>. Limited Edition 2021-2022 Winter Gear.",
"armorSpecialWinter2022HealerText": "Crystalline Ice Armor",
"armorSpecialWinter2022HealerNotes": "Glide as if skating, just above the ground, a glittering ethereal figure come to bring cool and calm. Increases Constitution by <%= con %>. Limited Edition 2021-2022 Winter Gear.",
"armorMystery201402Text": "Messenger Robes",
"armorMystery201402Notes": "Shimmering and strong, these robes have many pockets to carry letters. Confers no benefit. February 2014 Subscriber Item.",
"armorMystery201403Text": "Forest Walker Armor",
@@ -1665,6 +1683,15 @@
"headSpecialFall2021HealerText": "Summoner's Mask",
"headSpecialFall2021HealerNotes": "Your own magic turns your hair into shocking, bright flames when you don this mask. Increases Intelligence by <%= int %>. Limited Edition 2021 Autumn Gear.",
"headSpecialWinter2022RogueText": "Thundering Finale",
"headSpecialWinter2022RogueNotes": "What? Huh? There's a Rogue where? I'm sorry, I can't hear anything over these fireworks! Increases Perception by <%= per %>. Limited Edition 2021-2022 Winter Gear.",
"headSpecialWinter2022WarriorText": "Fuzzy Stocking Cap",
"headSpecialWinter2022WarriorNotes": "In festive green with soft red trim, this hat is guaranteed to keep you warm all winter. Increases Strength by <%= str %>. Limited Edition 2021-2022 Winter Gear.",
"headSpecialWinter2022MageText": "Pomegranate Helm",
"headSpecialWinter2022MageNotes": "Due to its thick husk, this festive, fruity helmet is berry strong. Increases Perception by <%= per %>. Limited Edition 2021-2022 Winter Gear.",
"headSpecialWinter2022HealerText": "Crystalline Ice Crown",
"headSpecialWinter2022HealerNotes": "Minute imperfections and impurities send the arms of this headdress branching out in unpredictable directions. It's symbolic! And also very, very pretty. Increases Intelligence by <%= int %>. Limited Edition 2021-2022 Winter Gear.",
"headSpecialGaymerxText": "Rainbow Warrior Helm",
"headSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.",
@@ -2185,6 +2212,11 @@
"shieldSpecialFall2021HealerText": "Summoned Creature",
"shieldSpecialFall2021HealerNotes": "An ethereal being rises from your magical flames to grant you extra protection. Increases Constitution by <%= con %>. Limited Edition 2021 Autumn Gear.",
"shieldSpecialWinter2022WarriorText": "Jingle Bell Shield",
"shieldSpecialWinter2022WarriorNotes": "This is a jingle bell, jingle bell, jingle bell shield. Jingle bell protect and jingle bell deflect. Increases Constitution by <%= con %>. Limited Edition 2021-2022 Winter Gear.",
"shieldSpecialWinter2022HealerText": "Enduring Ice Crystal",
"shieldSpecialWinter2022HealerNotes": "Though it melts in your hand, the power of elemental ice replenishes it from within. Increases Constitution by <%= con %>. Limited Edition 2021-2022 Winter Gear.",
"shieldMystery201601Text": "Resolution Slayer",
"shieldMystery201601Notes": "This blade can be used to parry away all distractions. Confers no benefit. January 2016 Subscriber Item.",
"shieldMystery201701Text": "Time-Freezer Shield",
+12 -1
View File
@@ -93,6 +93,16 @@
"audioTheme_pizildenTheme": "Pizilden's Theme",
"audioTheme_farvoidTheme": "Farvoid Theme",
"reportBug": "Report a Bug",
"reportBugHeaderDescribe": "Please describe the bug youre experiencing and our team will get back to you.",
"reportEmailText": "This will only be used to contact you regarding the bug report.",
"reportEmailPlaceholder": "Your email address",
"reportEmailError": "Please provide a valid email address",
"reportDescription": "Description",
"reportDescriptionText": "Include screenshots or Javascript console errors if helpful.",
"reportDescriptionPlaceholder": "Describe the bug in detail here",
"submitBugReport": "Submit Bug Report",
"reportSent": "Bug report sent!",
"reportSentDescription": "Well get back to you once our team has a chance to investigate. Thank you for reporting the issue.",
"overview": "Overview for New Users",
"dateFormat": "Date Format",
"achievementStressbeast": "Savior of Stoïkalm",
@@ -201,5 +211,6 @@
"howManyToBuy": "How many would you like to buy?",
"contactForm": "Contact the Moderation Team",
"loadEarlierMessages": "Load Earlier Messages",
"askQuestion": "Ask a Question"
"askQuestion": "Ask a Question",
"emptyReportBugMessage": "Report Bug Message missing"
}
+6 -1
View File
@@ -175,6 +175,10 @@
"fall2021HeadlessWarriorSet": "Headless (Warrior)",
"fall2021BrainEaterMageSet": "Brain Eater (Mage)",
"fall2021FlameSummonerHealerSet": "Flame Summoner (Healer)",
"winter2022FireworksRogueSet": "Fireworks (Rogue)",
"winter2022StockingWarriorSet": "Stocking (Warrior)",
"winter2022PomegranateMageSet": "Pomegranate (Mage)",
"winter2022IceCrystalHealerSet": "Ice Crystal (Healer)",
"eventAvailability": "Available for purchase until <%= date(locale) %>.",
"eventAvailabilityReturning": "Available for purchase until <%= availableDate(locale) %>. This potion was last available in <%= previousDate(locale) %>.",
"dateEndMarch": "April 30",
@@ -188,6 +192,7 @@
"mayYYYY": "May <%= year %>",
"juneYYYY": "June <%= year %>",
"novemberYYYY": "November <%= year %>",
"januaryYYYY": "January <%= year %>",
"dateEndJuly": "July 31",
"dateEndAugust": "August 31",
"dateEndSeptember": "September 21",
@@ -207,6 +212,6 @@
"howItWorks": "How it Works",
"g1g1HowItWorks": "Type in the username of the account youd like to gift to. From there, pick the sub length youd like to gift and check out. Your account will automatically be rewarded with the same level of subscription you just gifted.",
"limitations": "Limitations",
"g1g1Limitations": "This is a limited time event that starts on December 17th at 8:00 AM ET (13:00 UTC) and will end January 7th at 8:00 PM ET (1:00 UTC). This promotion only applies when you gift to another Habitican. If you or your gift recipient already have a subscription, the gifted subscription will add months of credit that will only be used after the current subscription is canceled or expires.",
"g1g1Limitations": "This is a limited time event that starts on December 16th at 8:00 AM ET (13:00 UTC) and will end January 6th at 8:00 PM ET (1:00 UTC). This promotion only applies when you gift to another Habitican. If you or your gift recipient already have a subscription, the gifted subscription will add months of credit that will only be used after the current subscription is canceled or expires.",
"noLongerAvailable": "This item is no longer available."
}
+8 -1
View File
@@ -653,5 +653,12 @@
"backgroundSpiralStaircaseNotes": "Grimpez, descendez, toujours en rond, dans un escalier en colimaçon.",
"backgrounds112021": "Ensemble 90 : sorti en novembre 2021",
"backgroundFortuneTellersShopText": "Boutique de la diseuse de bonne aventure",
"backgroundInsideAPotionBottleNotes": "Regarder à travers le verre en attendant les secours à l'intérieur d'une fiole à potion."
"backgroundInsideAPotionBottleNotes": "Regarder à travers le verre en attendant les secours à l'intérieur d'une fiole à potion.",
"backgroundWinterCanyonShopText": "Canyon hivernal",
"backgroundIcePalaceShopText": "Palais de glace",
"backgroundIcePalaceShopNotes": "Reignez sur le palais de glace.",
"backgroundFrozenPolarWatersText": "Calotte glacière",
"backgroundFrozenPolarWatersNotes": "Explorez la calotte glacière.",
"backgrounds122021": "Ensemble 91 : sorti en décembre 2021",
"backgroundWinterCanyonShopNotes": "Partez à l'aventure dans un canyon hivernal !"
}
@@ -32,7 +32,7 @@
"commGuidePara031": "Certaines guildes publiques peuvent contenir des contenus sensibles comme la dépression, la religion, la politique, etc. Ceci est permis tant que les conversations ne brisent ni les conditions d'utilisation ni le code de conduite en espace public et quelles ne dérivent pas du sujet.",
"commGuidePara033": "<strong>Les guildes publiques ne doivent PAS posséder de contenus réservés aux plus de 18 ans. Si une guilde prévoit de discuter régulièrement de contenu sensible, elle doit l'annoncer dans le titre de la guilde</strong>. Cela vise a rendre Habitica sûr et agréable pour tout le monde.",
"commGuidePara035": "<strong>Si la guilde en question a d'autres types de sujets sensibles, il est respectueux envers vos compagnons d'ajouter un avertissement à votre commentaire (par exemple : \"Attention : parle d'automutilation\")</strong>. Les guildes peuvent avoir établi leurs propres règles concernant ces avertissements, en plus de celles données ici. Si possible, merci d'utiliser la syntaxe <a href='https://habitica.fandom.com/fr/wiki/M%C3%A9mo_de_Markdown' target='_blank'>markdown</a> afin de cacher le contenu sensible sous des sauts de ligne, et permettre ainsi à ceux qui souhaiteraient ne pas lire vos propos de les contourner facilement, en faisant défiler leur écran. L'équipe de modération peut toujours décider de retirer votre contenu malgré tout : c'est à sa discrétion.",
"commGuidePara036": "De plus, les contenus sensibles doivent être appropriés au sujet parler d'automutilation dans une guilde focalisée sur la lutte contre la dépression peut avoir du sens, mais sera moins approprié dans une guilde musicale. Si vous constatez qu'une personne transgresse régulièrement ces règles, même après plusieurs rappels à l'ordre, veuillez signaler ces messages, et contacter le responsable de la communauté à l'adresse <a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a>.",
"commGuidePara036": "De plus, les contenus sensibles doivent être appropriés au sujet parler d'automutilation dans une guilde focalisée sur la lutte contre la dépression peut avoir du sens, mais sera moins approprié dans une guilde musicale. Si vous constatez qu'une personne transgresse régulièrement ces règles, même après plusieurs rappels à l'ordre, veuillez signaler ces messages.",
"commGuidePara037": "<strong>Aucune guilde, publique ou privée, ne devrait être créée dans le but dattaquer un groupe ou une personne</strong>. Créer une telle guilde est passible dun bannissement immédiat. Combattez vos mauvaises habitudes, pas vos compagnons daventure !",
"commGuidePara038": "<strong>Tous les défis de la taverne et des guildes publiques doivent aussi respecter ces règles</strong>.",
"commGuideHeadingInfractionsEtc": "Infractions, conséquences et restauration",
+2 -1
View File
@@ -369,5 +369,6 @@
"hatchingPotionMossyStone": "pierre moussue",
"hatchingPotionSunset": "couché de soleil",
"hatchingPotionMoonglow": "lune de miel",
"hatchingPotionSolarSystem": "système solaire"
"hatchingPotionSolarSystem": "système solaire",
"hatchingPotionOnyx": "Onyx"
}
+9 -1
View File
@@ -2508,5 +2508,13 @@
"weaponArmoirePotionZombieNotes": "Utilisez cette potion pour faire éclore un familier zombie, mais faites attention au cas où il commencerait à vous grignoter ! Augmente la constitution de <%= con %> et la perception de <%= per %>. Armoire enchantée : ensemble de potions (objet 7 de 10)",
"weaponArmoirePotionBlueNotes": "Vous vivrez la vie un peu plus moelleuse et beaucoup plus en bleu avec cette potion pour faire des bêtes en barbe à papa bleue ! Augmente l'intelligence de <%= int %> et la constitution de <%= con %>. Armoire enchantée : ensemble de potions (objet 9 de 10)",
"weaponArmoirePotionRedNotes": "Cette potion va vous en faire voir de toutes les couleurs, mais surtout rouge ! Augmente la force et la constitution de <%= attrs %> chacune. Armoire enchantée : ensemble de potions (objet 4 de 10)",
"offHandCapitalized": "Objet de main secondaire"
"offHandCapitalized": "Objet de main secondaire",
"weaponArmoireRegalSceptreText": "Sceptre régalien",
"headMystery202112Text": "Couronne d'ondine arctique",
"headMystery202112Notes": "Cette couronne gelée brille comme les profondeurs cachées d'un iceberg. Ne confère aucun bonus. Équipement d'abonnement de décembre 2021.",
"headArmoireRegalCrownText": "Couronne régalienne",
"armorMystery202112Text": "Queue d'ondine arctique",
"armorMystery202112Notes": "Glissez à travers les mers de glace sans vous refroidir avec cette queue chatoyante. Ne confère aucun bonus. Équipement d'abonnement de décembre 2021.",
"weaponArmoireRegalSceptreNotes": "Affichez votre autorité régalienne en tenant ce bâton incrusté de pierres précieuses dans votre main. Augmente la perception de <%= per %>. Armoire enchantée : ensemble régalien (objet 2 de 2).",
"headArmoireRegalCrownNotes": "Tout monarque aurait de la change d'avoir une si majestueuse couronne. Armoire enchantée : ensemble régalien (objet 1 de 2)."
}
+9 -1
View File
@@ -736,5 +736,13 @@
"questSolarSystemCompletion": "Grâce à une pratique attentive, l'équipage et vous-même parvenez à empêcher les Diversionoïdes de vous balayer par-dessus bord, simplement en les remarquant et en les reconnaissant sans les laisser prendre le dessus. Alors que vous passez en toute sécurité près de l'étoile pulsante, @gawrone remarque un groupe de bouteilles flottantes et les attire à bord. Chacune semble contenir un minuscule système solaire !<br><br>\"Eh bien, on dirait que notre dur labeur nous a apporté de belles récompenses !\" dit @beffymaroo. \"Voyons quelles merveilles célestes pourraient apparaître si nous faisons éclore des œufs d'animaux de compagnie avec ces nouvelles potions.\"",
"questSolarSystemBoss": "Diversionoïdes",
"questSolarSystemNotes": "Votre équipe voyage à travers le cosmos, pour en voir de toutes les couleurs, à bord d'un dirigeable fantastique conçu par les talents dingénierie spatiale de @gawrone. Sa propulsion méditative repose sur le calme de votre groupe pour maintenir le cap.<br><br>Plus haut, dans les nuages de galaxies étincelantes, vous repérez une étoile aux pulsations inquiétantes. \"Restez concentré\", prévient @beffymaroo. \"Si nous sommes trop distraits lorsque nous passons cette nova, l'attraction entre l'étoile et notre vaisseau peut nous faire dévier de notre route !\"<br><br>Alors que vous vous approchez de l'étoile, des impulsions d'énergie étrange viennent vers le vaisseau.<br><br>\"Ce sont des Diversionoïdes, des créatures pensantes qui essaient de nous déconcentrer\", dit @SabreCat. \"Si nous pouvons les laisser passer sans nous emporter, nous devrions pouvoir maintenir le cap vers notre objectif !\"",
"questSolarSystemText": "Un voyage de concentration cosmique"
"questSolarSystemText": "Un voyage de concentration cosmique",
"questOnyxNotes": "@Vikte, @aspiring_advocate, et @starsystemic savent que vous avez perdu de la motivation ces derniers temps et décident qu'une journée amusante pourrait vous remonter le moral. Cependant, \"s'amuser\" signifie apparemment faire de la plongée sous-marine pour chercher un trésor dans la crevasse sombre ! Vous enfilez votre équipement de plongée, montez à bord du bateau et ramez vers l'ancienne cité de Dilatory. Tout en voyageant, vous leur demandez quel genre de trésor vous cherchez.<br><br>\"Des runes de Pluton !\" dit @Vikte.<br><br>\"Non, des runes de Lion !\" dit @aspiring_advocate.<br><br>\"Non, des pierres d'onyx !\" dit @starsystemic.<br><br>Alors qu'ils discutent entre eux, vous regardez dans l'océan et voyez l'entrée de la grotte juste en dessous ! Dans l'excitation, vous sautez, et plongez dans la mer, laissant le trio regarder pendant que vous nagez vers la crevasse sombre pour chercher le trésor vous-même.",
"questOnyxCompletion": "Lorsque vous pénétrez dans la crevasse sombre, les crevettes-mantes qui y vivent s'enfuient, semblant avoir peur de vous. Cependant, elles reviennent rapidement en portant de petits orbes colorés, et vous réalisez que ce sont les trésors que tout le monde voulait ! Vous empochez une bonne collection de chaque type, dites au revoir aux crevettes, et retournez au bateau où les autres vous aident à monter à bord.<br><br>\"Où étais-tu ?\". @Vikte s'exclame. En réponse, vous leur montrez le trésor que vous avez collecté.<br><br>\"Ces ingrédients permettent de faire des potions d'éclosion magiques Onyx !\", dit @aspiring_advocate avec enthousiasme alors que vous commencez à retourner sur le rivage.<br><br>\"Donc... nous pouvons faire éclore des animaux domestiques Onyx !\". @starsystemic sourit. \"N'avions-nous pas dit que ce serait amusant ?\"<br><br>Vous souriez en retour, dans l'attente de vos nouveaux animaux de compagnie, et avec la motivation de terminer vos tâches !",
"questOnyxText": "L'odyssée d'onyx",
"questOnyxCollectPlutoRunes": "Runes de Pluton",
"questOnyxCollectLeoRunes": "Runes du lion",
"questOnyxCollectOnyxStones": "Pierres d'onyx",
"questOnyxDropOnyxPotion": "Potion d'éclosion onyx",
"questOnyxUnlockText": "Déverrouille l'achat de potions d'éclosion onyx au marché"
}
+2 -1
View File
@@ -198,5 +198,6 @@
"mysterySet202107": "Ensemble de passion de la plage",
"mysterySet202109": "Ensemble lunaire du Lépidoptère",
"mysterySet202110": "Ensemble de la gargouille moussue",
"mysterySet202111": "Ensemble de chronomancien cosmique"
"mysterySet202111": "Ensemble de chronomancien cosmique",
"mysterySet202112": "Ensemble d'ondine antarctique"
}
+1 -1
View File
@@ -9,7 +9,7 @@
"letsGetStarted": "בואו נתחיל!",
"yourProgress": "ההתקדמות שלך",
"onboardingProgress": "<%= percentage %>% התקדמות",
"gettingStartedDesc": "יש להשלים את משימות ההסתגלות ולאחר שכולן יושלמו תרוויח/י <strong>5 הישגים</strong> ו־<strong class=\"gold-amount\">100 מטבעות זהב</strong>!",
"gettingStartedDesc": "בעת השלמת משימות ההסתגלות הללו מרוויחים <strong>5 הישגים</strong> ו־<strong class=\"gold-amount\">100 מטבעות זהב</strong>!",
"yourRewards": "הפרסים שלך",
"foundNewItems": "מצאת פריטים חדשים!",
"hideAchievements": "הסתרת <%= category %>",
+3 -3
View File
@@ -93,7 +93,7 @@
"constitution": "חוסן",
"conText": "חוסן מקטין את כמות הנזק שאתה חוטף מהרגלים רעים או מטלות יומיות שהזנחת.",
"perception": "תפיסה",
"perText": "תפיסה מגדילה את כמות הזהב שאתה מרוויח, ומרגע שאתה יכול להשתמש בשוק, מגבירה את סיכוייך למצוא חפצי ערך בעת ביצוע המשימות שלך.",
"perText": "התפיסה מגדילה את כמות מטבעות הזהב שמרוויחים, ומרגע שאפשר להשתמש בשוק, היא מגבירה את הסיכויים למצוא פריטים בעלי ערך בעת ביצוע המשימות.",
"intelligence": "תבונה",
"intText": "תבונה מגדילה את כמות הניסיון שאתה מרוויח, וברגע שנפתחו בפנייך המקצועות, קובעת כמה מאנה זמינה ליכולות המקצוע שלך.",
"levelBonus": "תוסף דרגה",
@@ -125,10 +125,10 @@
"taskAllocationPop": "Assigns Points based on the Strength, Intelligence, Constitution, and Perception categories associated with the tasks you complete.",
"distributePoints": "הקצה נקודות שעדיין לא נוצלו",
"distributePointsPop": "Assigns all unallocated Stat Points according to the selected allocation scheme.",
"warriorText": "לוחמים גורמים ליותר \"פגיעות חמורות\", אשר נותנות בונוס אקראי של זהב, ניסיון או סיכוי למציאת פריט כשמשלימים משימה. הם גם גורמים נזק רב למפלצות האויב. שחק כלוחם אם אתה אוהב למצוא פרסים גדולים ומפתיעים, או אם אתה רוצה לקרוע את אויביך לגזרים ולנגב את הרצפה עם הגופות המרוטשות שלהם!",
"warriorText": "לוחמים גורמים ליותר \"פגיעות חמורות\", שנותנות בונוס אקראי של מטבעות זהב, ניסיון או סיכוי למציאת פריט כשמשלימים משימה. הם גם גורמים נזק רב למפלצות האויב. שחק כלוחם אם אתה אוהב למצוא פרסים גדולים ומפתיעים, או אם אתה רוצה לקרוע את אויביך לגזרים ולנגב את הרצפה עם הגופות המרוטשות שלהם!",
"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 leveling 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 leveling up and unlocking advanced features!",
"rogueText": "נוכלים אוהבים לצבור עושר, הם משיגים יותר זהב מכל אחד אחר והם מוכשרים במציאת פריטים אקראיים. יכולת החשאיות המפורסמת שלהם מאפשרת להם להתחמק מהתוצאות של מטלות יומיות שפוספסו. שחק נוכל אם אתה נהנה במיוחד מפרסים, הישגים, שלל ותגים.",
"rogueText": "נוכלים אוהבים לצבור עושר, הם משיגים יותר מטבעות זהב מכל אחד אחר והם מוכשרים במציאת פריטים אקראיים. יכולת החשאיות המפורסמת שלהם מאפשרת להם להתחמק מהתוצאות של מטלות יומיות שפוספסו. כשרוצים להשיג פרסים, הישגים, שלל ותגים - כל מה שצריך זה לשחק אותה נוכלים!",
"healerText": "מרפאים הם חסינים לכל פגע, והם מציעים את ההגנה הזו גם לחבריהם. מטלות יומיות והרגלים רעים לא ממש מזיזים להם, ויש להם דרכים לרפא את הבריאות שלהם לאחר כישלון. שחק מרפא אם אתה נהנה לעזור לחברים שלך במשחק, או אם הרעיון לרמות את המוות דרך עבודה קשה קוסם לך!",
"optOutOfClasses": "וותר",
"chooseClass": "Choose your Class",
+2 -2
View File
@@ -1,11 +1,11 @@
{
"lostAllHealth": "אזלו לך נקודות הבריאות!",
"dontDespair": "לא להתייאש!",
"deathPenaltyDetails": "איבדת דרגה, את הזהב שלך, ופריט כלשהו, אך אפשר לקבלם בחזרה באמצעות עבודה קשה! בהצלחה--יהיה בסדר.",
"deathPenaltyDetails": "איבדת דרגה, את מטבעות הזהב שלך, ופריט כלשהו, אך אפשר לקבלם בחזרה באמצעות עבודה קשה! בהצלחה--יהיה בסדר.",
"refillHealthTryAgain": "מילוי נקודות הבריאות וניסיון חוזר",
"dyingOftenTips": "זה קורה לעיתים קרובות? <a href='http://habitica.fandom.com/wiki/Death_Mechanics#Strategies_for_Staying_Alive' target='_blank'>הינה כמה עצות!</a>",
"losingHealthWarning": "זהירות - נקודות הבריאות אוזלות!",
"losingHealthWarning2": "אל תתנו לבריאות לרדת לאפס! אחרת תרדו דרגה, תאבדו זהב ופריט ציוד.",
"losingHealthWarning2": "לא לתת לבריאות שלך לרדת לאפס! אחרת, הדמות שלך תרד בדרגה, תאבד את כל מטבעות הזהב, וגם פריט ציוד.",
"toRegainHealth": "כדי לצבור בריאות בחזרה:",
"lowHealthTips1": "יש לעלות בדרגה כדי להחלים לגמרי!",
"lowHealthTips2": "רכשו שיקוי בריאות בעמודת הפרסים כדי להחזיר 15 נקודות בריאות.",
+3 -3
View File
@@ -1,11 +1,11 @@
{
"frequentlyAskedQuestions": "שאלות נפוצות",
"faqQuestion0": "אני מבולבל. היכן יש סקירה?",
"iosFaqAnswer0": "תחילה, יש להגדיר משימות שברצונך לעשות בחיי היום־יום. ואז, לאחר השלמת המשימות בחיים האמיתיים וסימונן, צוברים נקודות ניסיון וזהב. בזהב משתמשים כדי לרכוש ציוד וכמה פריטים, כמו־גם פרסים. נקודות ניסיון מעלות את הדמות שלך בשלבים ומשחררות תוכן כמו חיות מחמד, יכולות, והרפתקאות! אפשר לעצב את הדמות שלך תחת \"תפריט > עיצוב דמות\".\n\nכמה דרכים בסיסיות לפעול: יש ללחוץ על (+) בפינה הימנית העליונה כדי להוסיף משימה חדשה. יש ללחוץ על משימה קיימת כדי לערוך אותה, ולהחליק שמאלה על משימה כדי למחוק אותה. אפשר למיין משימות בעזרת שימוש בתגיות בפינה השמאלית העליונה, ולהרחיב ולכווץ רשימות תיוג בעזרת לחיצה על בועת הרשימות.",
"iosFaqAnswer0": "תחילה, יש להגדיר משימות שברצונך לעשות בחיי היום־יום. ואז, לאחר השלמת המשימות בחיים האמיתיים וסימונן, צוברים נקודות ניסיון ומטבעות זהב. במטבעות הזהב משתמשים כדי לרכוש ציוד וכמה פריטים, כמו־גם פרסים. נקודות ניסיון מעלות את הדמות שלך בשלבים ומשחררות תוכן כמו חיות מחמד, יכולות, והרפתקאות! אפשר לעצב את הדמות שלך תחת \"תפריט > עיצוב דמות\".\n\nכמה דרכים בסיסיות לפעול: יש ללחוץ על (+) בפינה הימנית העליונה כדי להוסיף משימה חדשה. יש ללחוץ על משימה קיימת כדי לערוך אותה, ולהחליק שמאלה על משימה כדי למחוק אותה. אפשר למיין משימות בעזרת שימוש בתגיות בפינה השמאלית העליונה, ולהרחיב ולכווץ רשימות תיוג בעזרת לחיצה על בועת הרשימות.",
"androidFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn experience and gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as Pets, Skills, and Quests! You can customize your character under Menu > [Inventory >] Avatar.\n\n Some basic ways to interact: click the (+) in the lower-right-hand corner to add a new task. Tap on an existing task to edit it, and swipe left on a task to delete it. You can sort tasks using Tags in the upper-right-hand corner, and expand and contract checklists by clicking on the checklist count box.",
"webFaqAnswer0": "ראשית, הגדירו משימות שתרצו לבצע בחיי היומיום שלכם. לאחר מכן, תוך כדי השלמת המשימות בחיים האמיתיים וסימון ביצוע שלהן - תרוויחו ניסיון זהב. הזהב משמש לרכישת ציוד ופריטים מסוימים, כמו גם פרסים מותאמים אישית. ניסיון גורם לדמות שלכם לעלות רמות ולפתוח חלקים במשחק כמו חיות מחמד, מיומנויות ומשימות! לקבלת פרטים נוספים, ראו סקירה צעד-אחר-צעד של המשחק ב [עזרה -> סקירה למשתמשים חדש](https://habitica.com/static/overview).",
"webFaqAnswer0": "ראשית, יש להגדיר משימות שברצונך לבצע בחיי היומיום שלך. לאחר מכן, תוך השלמת המשימות בחיים האמיתיים וסימונן - מרוויחים ניסיון ומטבעות זהב. מטבעות הזהב משמשים לרכישת ציוד ופריטים מסוימים, כמו גם פרסים מותאמים אישית. ניסיון גורם לדמות שלך לעלות רמות ולפתוח חלקים במשחק כמו חיות מחמד, מיומנויות ומשימות! לקבלת פרטים נוספים, נא לראות את הסקירה בצעד־אחר־צעד של המשחק ב־[עזרה -> סקירה למשתמשים חדש](https://habitica.com/static/overview).",
"faqQuestion1": "כיצד לארגן משימות?",
"iosFaqAnswer1": "הרגלים טובים (אלה עם +) הם משימות שאפשר לעשות הרבה פעמים ביום, כגון אכילת ירקות. הרגלים רעים (אלה עם -) הם משימות שכדאי להימנע מהן, כמו לכסוס ציפורניים. בהרגלים עם + וגם - יש בחירה טובה ובחירה גרועה, כמו לעלות במדרגות לעומת מעלית. הרגלים טובים מקנים ניסיון וזהב. הרגלים רעים פוגעים בבריאות.\n\nמטלות יומיומיות הן משימות שצריך לעשות כל יום, כמו לצחצח שיניים או לבדוק את הדואר האלקטרוני. אפשר לשנות את הימים בהם יש לבצע את המטלה היומיומית בעזרת הקשה לעריכתה. אם מדלגים על מטלה יומיומית ביום בו יש לבצע אותה, הדמות תינזק במהלך הלילה. יש להיזהר שלא להוסיף יותר מדי מטלות יומיומיות בבת אחת!\n\n\"משימות לביצוע\" הן רשימת המשימות שלך לביצוע. השלמת משימה לביצוע מקנה זהב וניסיון. אף פעם לא מאבדים בריאות ממשימות לביצוע. אפשר להוסיף תאריך יעד למשימות לביצוע בעזרת הקשה לעריכתן.",
"iosFaqAnswer1": "הרגלים טובים (אלה עם +) הם משימות שאפשר לעשות הרבה פעמים ביום, כגון אכילת ירקות. הרגלים רעים (אלה עם -) הם משימות שכדאי להימנע מהן, כמו לכסוס ציפורניים. בהרגלים עם + וגם - יש בחירה טובה ובחירה גרועה, כמו לעלות במדרגות לעומת מעלית. הרגלים טובים מקנים ניסיון ומטבעות זהב. הרגלים רעים פוגעים בבריאות.\n\nמטלות יומיומיות הן משימות שצריך לעשות כל יום, כמו לצחצח שיניים או לבדוק את הדואר האלקטרוני. אפשר לשנות את הימים בהם יש לבצע את המטלה היומיומית בעזרת הקשה לעריכתה. אם מדלגים על מטלה יומיומית ביום בו יש לבצע אותה, הדמות תינזק במהלך הלילה. יש להיזהר שלא להוסיף יותר מדי מטלות יומיומיות בבת אחת!\n\n\"משימות לביצוע\" הן רשימת המשימות שלך לביצוע. השלמת משימה לביצוע מקנה מטבעות זהב וניסיון. אף פעם לא מאבדים בריאות ממשימות לביצוע. אפשר להוסיף תאריך יעד למשימות לביצוע בעזרת הקשה לעריכתן.",
"androidFaqAnswer1": "Good Habits (the ones with a +) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a -) are tasks that you should avoid, like biting nails. Habits with a + and a - have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award experience and gold. Bad Habits subtract health.\n\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by tapping to edit it. If you skip a Daily that is due, your character will take damage overnight. Be careful not to add too many Dailies at once!\n\n To-Dos are your To-Do list. Completing a To-Do earns you gold and experience. You never lose health from To-Dos. You can add a due date to a To-Do by tapping to edit.",
"webFaqAnswer1": "* Good Habits (the ones with a :heavy_plus_sign:) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a :heavy_minus_sign:) are tasks that you should avoid, like biting nails. Habits with a :heavy_plus_sign: and a :heavy_minus_sign: have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award Experience and Gold. Bad Habits subtract Health.\n* Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by clicking the pencil item to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n* To-Dos are your To-Do list. Completing a To-Do earns you Gold and Experience. You never lose Health from To-Dos. You can add a due date to a To-Do by clicking the pencil icon to edit.",
"faqQuestion2": "מהן מספר משימות לדוגמה?",
+3 -3
View File
@@ -63,7 +63,7 @@
"weaponWizard5Text": "מטה הרב-מג",
"weaponWizard5Notes": "עוזר לרקום בזהירות את הלחשים המסובכים ביותר, ובנוסף, זה אומר שהגעת לדרגה הנחשבת ביותר באומנות הקסם. מגביר את התבונה שלך ב <%= int %> ואת התפיסה שלך ב <%= per %> נקודות.",
"weaponWizard6Text": "מטה זהב",
"weaponWizard6Notes": "עשוי מאוריכאלקום - זהב האלכימים. מטה זה הוא נפלא, נדיר, ומהודר בצורה שלא תיאמן. מגביר את התבונה שלך ב <%= int %> ואת התפיסה שלך ב <%= per %> נקודות.",
"weaponWizard6Notes": "עשוי מאוריכאלקום - זהב האלכימים. מטה זה הוא נפלא, נדיר, ומהודר בצורה שלא תיאמן. מגביר את התבונה שלך ב־<%= int %> ואת התפיסה שלך ב־<%= per %> נקודות.",
"weaponHealer0Text": "שרביט למתחילים",
"weaponHealer0Notes": "בשביל מרפאים בהכשרה. לא מקנה יתרון.",
"weaponHealer1Text": "שרביט טירונים",
@@ -386,7 +386,7 @@
"armorWarrior3Notes": "סט פלדה העוטף את כולך, גאוותם של אבירים רבים מספור. מגביר את ערך החוסן שלך ב<%= con %> נקודות.",
"armorWarrior4Text": "שריון אדום",
"armorWarrior4Notes": "שיריון כבד זה אוצר בתוכו שלל קסמים הגנתיים. מגביר את ערך החוסן שלך ב<%= con %> נקודות.",
"armorWarrior5Text": "שריון זהב",
"armorWarrior5Text": יריון זהב",
"armorWarrior5Notes": "הוא נראה כלבוש טקסי, אך אין להב עלי אדמות שיחדור אותו. מגביר את ערך החוסן שלך ב<%= con %> נקודות.",
"armorRogue1Text": "עור משומן",
"armorRogue1Notes": "שריון זה טופל במיוחד כדי להפחית רעש. מגביר את ערך התפיסה שלך ב<%= per %> נקודות.",
@@ -977,7 +977,7 @@
"headSpecialWinter2016HealerText": "קסדת פיית כנפיים",
"headSpecialWinter2016HealerNotes": "כנפייםאלומתנפנפותכלכךמהרשהןמטשטשות! מגבירות תבונה ב <%= int %>. מהדורה מוגבלת 2015-2016, ציוד חורף.",
"headSpecialSpring2016RogueText": "מסכת כלבלב טוב",
"headSpecialSpring2016RogueNotes": "אוווו, איזה כלבלב חמוד! בוא הנה, תן לי ללטף אותך. ...הי, לאן נעלם כל הזהב שלי? מגביר תפיסה ב <%= per %>. מהדורה מוגבלת 2016, ציוד אביב.",
"headSpecialSpring2016RogueNotes": "אוו, איזה כלבלב חמוד! בוא הנה, תן לי ללטף אותך. ...הי, לאן נעלמו כל מטבעות הזהב שלי? מגביר תפיסה ב־<%= per %>. מהדורה מוגבלת 2016, ציוד אביב.",
"headSpecialSpring2016WarriorText": "קסדת שומר עכבר",
"headSpecialSpring2016WarriorNotes": "לעולם לא תחטפו יותר בראש! תנו להם לנסות! מגבירה חוסן ב <%= str %>. מהדורה מוגבלת 2016, ציוד אביב.",
"headSpecialSpring2016MageText": "כובע מלכין גדול",
+2 -2
View File
@@ -12,13 +12,13 @@
"valentineCardNotes": "שלח כרטיס יום אהבה לשחקנים בחבורה.",
"valentine0": "\"הוורדים אדומים\n\nמטלות הן כחולות\n\nנפלא שאנחנו מסיימים\n\nבחבורתך משימות!\"",
"valentine1": "״ורדים אדומות\n\nסיגליות נחמדות\n\nבואו ביחד\n\nנלחם בעצלות!״",
"valentine2": "״ורדים אדומות\n\nוהסגנון כבר צהבהב\n\nמקווים שאהבתם\n\nכי השיר עלה 10 זהב.״",
"valentine2": "״ורדים אדומות\n\nוהסגנון כבר צהבהב\n\nמקווים שאהבתם\n\nכי השיר עלה 10 מטבעות זהב.״",
"valentine3": "״ורדים אדומות\n\nנטיפי קרח כחולים\n\nאין אוצר טוב\n\nמבילוי עם אהובים!״",
"valentineCardAchievementTitle": "חברים מעריצים",
"valentineCardAchievementText": "Aww, you and your friend must really care about each other! Sent or received <%= count %> Valentine's Day cards.",
"polarBear": "דוב קוטב",
"turkey": "תרנגול הודו",
"gildedTurkey": "הודו מוזהב",
"gildedTurkey": "תרנגול הודו מוזהב",
"polarBearPup": "דובון קוטב",
"jackolantern": "ג'ק-או-לנטרן",
"ghostJackolantern": "Ghost Jack-O-Lantern",

Some files were not shown because too many files have changed in this diff Show More