Compare commits

..

49 Commits

Author SHA1 Message Date
SabreCat 43a196ffea 4.254.2 2022-12-28 11:43:07 -06:00
SabreCat f72224f9f1 fix(event): more date corrections 2022-12-28 11:42:56 -06:00
SabreCat ec2322bdd9 4.254.1 2022-12-27 11:59:21 -06:00
SabreCat 3adbc33546 fix(event): update Snowball dates 2022-12-27 11:59:15 -06:00
SabreCat b79f53a108 4.254.0 2022-12-23 15:35:50 -06:00
SabreCat 98c4910051 Merge branch 'release' into develop 2022-12-23 15:35:20 -06:00
Natalie L 55e7ef138e chore(content): add NYE party hat and migration script (#14419)
* chore(content): add NYE party hat and migration script

* chore(subproj): update habitica-images

* chore(sprites): corrected sprite CSS run

* fix(event): unbork migration, add latecomer hook

Co-authored-by: SabreCat <sabe@habitica.com>
2022-12-23 15:35:23 -06:00
SabreCat b74c7aa009 chore(subproj): update module 2022-12-22 15:45:36 -06:00
SabreCat 825baaf7e9 fix(string): winter not spring 2022-12-20 10:05:31 -06:00
SabreCat 079279e5c1 Revert "fix(tests): if singleton event, always provide empty string suffix"
This reverts commit 64bf4ee4b6.
2022-12-20 09:51:24 -06:00
Weblate 01c7791fd9 Merge branch 'origin/develop' into Weblate. 2022-12-19 23:25:58 +01:00
Weblate 9ed06223e0 Translated using Weblate (Indonesian)
Currently translated at 88.1% (126 of 143 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (13 of 13 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (404 of 404 strings)

Translated using Weblate (Ukrainian)

Currently translated at 60.0% (453 of 755 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (127 of 127 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (746 of 746 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (143 of 143 strings)

Translated using Weblate (French)

Currently translated at 100.0% (2719 of 2719 strings)

Translated using Weblate (French)

Currently translated at 99.8% (2716 of 2719 strings)

Translated using Weblate (French)

Currently translated at 99.1% (2696 of 2719 strings)

Translated using Weblate (French)

Currently translated at 100.0% (746 of 746 strings)

Translated using Weblate (French)

Currently translated at 99.0% (739 of 746 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (Polish)

Currently translated at 99.5% (743 of 746 strings)

Translated using Weblate (Ukrainian)

Currently translated at 59.8% (452 of 755 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (French)

Currently translated at 100.0% (221 of 221 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (Polish)

Currently translated at 98.9% (738 of 746 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (210 of 210 strings)

Translated using Weblate (Russian)

Currently translated at 99.4% (2703 of 2719 strings)

Translated using Weblate (Russian)

Currently translated at 99.8% (745 of 746 strings)

Translated using Weblate (French)

Currently translated at 100.0% (404 of 404 strings)

Translated using Weblate (Spanish)

Currently translated at 94.9% (2581 of 2719 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (746 of 746 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (746 of 746 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (181 of 181 strings)

Translated using Weblate (French)

Currently translated at 100.0% (210 of 210 strings)

Translated using Weblate (French)

Currently translated at 100.0% (143 of 143 strings)

Translated using Weblate (Spanish)

Currently translated at 94.9% (2581 of 2719 strings)

Translated using Weblate (Japanese)

Currently translated at 99.4% (2705 of 2719 strings)

Translated using Weblate (German)

Currently translated at 99.4% (742 of 746 strings)

Translated using Weblate (German)

Currently translated at 99.1% (740 of 746 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (210 of 210 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (210 of 210 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (210 of 210 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2719 of 2719 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (2719 of 2719 strings)

Translated using Weblate (Portuguese (Brazil))

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 (German)

Currently translated at 99.0% (739 of 746 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (221 of 221 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (210 of 210 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2719 of 2719 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (746 of 746 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 99.9% (2718 of 2719 strings)

Co-authored-by: Ana Beatriz <anabeatriz.augusto06@yahoo.com>
Co-authored-by: Benoit Hetru <me+hbtc@gahanka.net>
Co-authored-by: Ike Osenberg <ike.osenberg@gmail.com>
Co-authored-by: LiziKnight <liziknight0316@outlook.com>
Co-authored-by: Mara S. (Dolichotis) <marascherzer@gmail.com>
Co-authored-by: Marek Tomek <markowalzky2@gmail.com>
Co-authored-by: Muhammad Fauzi Ramadhan <muh_fauzi_ramadhan@yahoo.co.id>
Co-authored-by: Nazar Paruna <nazarparuna@gmail.com>
Co-authored-by: Sandra Marcial <sandramarcial80@gmail.com>
Co-authored-by: Sergey Shevelev <vlkgamer45@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: そら <comi4work@gmail.com>
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/id/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/uk/
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/pl/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/front/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/es/
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/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt_BR/
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/groups/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/rebirth/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/it/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/zh_Hans/
Translation: Habitica/Achievements
Translation: Habitica/Backgrounds
Translation: Habitica/Communityguidelines
Translation: Habitica/Front
Translation: Habitica/Gear
Translation: Habitica/Groups
Translation: Habitica/Questscontent
Translation: Habitica/Rebirth
Translation: Habitica/Settings
Translation: Habitica/Subscriber
2022-12-19 23:25:48 +01:00
SabreCat 6d33ec02a8 Merge branch 'release' into develop 2022-12-19 16:24:48 -06:00
SabreCat c6d36ad6b1 4.253.0 2022-12-19 16:22:28 -06:00
SabreCat 64bf4ee4b6 fix(tests): if singleton event, always provide empty string suffix 2022-12-19 16:22:20 -06:00
Natalie L fd9d738cc6 chore(content): add winter wonderland items (#14407)
* chore(content): add winter wonderland items

* chore(typos): dates are hard

* fix(tz): how far back we have fallen

* fix(event): four extra hours for stragglers

* fix(typo): singular snowball spell

* fix(gear): remove stray incorrect event prop

* merge release

* Revert "merge release"

This reverts commit 83e29d0288.

* feat(content): add EN text

* fix(dates): 2022-2023 Winter

* chore(content): add featured quest bundle

* fix(event): delay Snowballs, add quests to Seasonal Shop

Co-authored-by: Sabe Jones <sabrecat@gmail.com>
Co-authored-by: SabreCat <sabe@habitica.com>
2022-12-19 15:53:52 -06:00
dependabot[bot] 0d6dbfdc95 build(deps): bump bootstrap-vue from 2.22.0 to 2.23.1 in /website/client (#14323)
Bumps [bootstrap-vue](https://github.com/bootstrap-vue/bootstrap-vue) from 2.22.0 to 2.23.1.
- [Release notes](https://github.com/bootstrap-vue/bootstrap-vue/releases)
- [Changelog](https://github.com/bootstrap-vue/bootstrap-vue/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/bootstrap-vue/bootstrap-vue/compare/v2.22.0...v2.23.1)

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

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-12-16 13:27:36 -05:00
dependabot[bot] 5162f8c2a0 build(deps): bump stripe from 10.13.0 to 11.4.0 (#14411)
Bumps [stripe](https://github.com/stripe/stripe-node) from 10.13.0 to 11.4.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/v10.13.0...v11.4.0)

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

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-12-16 13:24:37 -05:00
dependabot[bot] ae1c9c37c9 build(deps-dev): bump axios from 0.27.2 to 1.2.1 (#14397)
Bumps [axios](https://github.com/axios/axios) from 0.27.2 to 1.2.1.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.27.2...v1.2.1)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:development
  update-type: version-update:semver-major
...

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-12-16 13:22:03 -05:00
dependabot[bot] 0ed8a220d6 build(deps): bump uuid from 8.3.2 to 9.0.0 (#14209)
Bumps [uuid](https://github.com/uuidjs/uuid) from 8.3.2 to 9.0.0.
- [Release notes](https://github.com/uuidjs/uuid/releases)
- [Changelog](https://github.com/uuidjs/uuid/blob/main/CHANGELOG.md)
- [Commits](https://github.com/uuidjs/uuid/compare/v8.3.2...v9.0.0)

---
updated-dependencies:
- dependency-name: uuid
  dependency-type: direct:production
  update-type: version-update:semver-major
...

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-12-16 13:20:13 -05:00
dependabot[bot] d2cbcbd062 build(deps-dev): bump sinon from 14.0.2 to 15.0.1 (#14412)
Bumps [sinon](https://github.com/sinonjs/sinon) from 14.0.2 to 15.0.1.
- [Release notes](https://github.com/sinonjs/sinon/releases)
- [Changelog](https://github.com/sinonjs/sinon/blob/main/docs/changelog.md)
- [Commits](https://github.com/sinonjs/sinon/compare/v14.0.2...v15.0.1)

---
updated-dependencies:
- dependency-name: sinon
  dependency-type: direct:development
  update-type: version-update:semver-major
...

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-12-16 13:19:09 -05:00
dependabot[bot] 349a0eba44 build(deps): bump shell-quote and @storybook/vue in /website/client (#14398)
Bumps [shell-quote](https://github.com/ljharb/shell-quote) to 1.7.4 and updates ancestor dependency [@storybook/vue](https://github.com/storybookjs/storybook/tree/HEAD/app/vue). These dependencies need to be updated together.


Updates `shell-quote` from 1.7.2 to 1.7.4
- [Release notes](https://github.com/ljharb/shell-quote/releases)
- [Changelog](https://github.com/ljharb/shell-quote/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/shell-quote/compare/v1.7.2...v1.7.4)

Updates `@storybook/vue` from 6.3.13 to 6.5.14
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/v6.5.14/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v6.5.14/app/vue)

---
updated-dependencies:
- dependency-name: shell-quote
  dependency-type: indirect
- dependency-name: "@storybook/vue"
  dependency-type: direct:production
...

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-12-16 13:03:24 -05:00
dependabot[bot] 4f7ed6e7cc build(deps): bump core-js from 3.26.0 to 3.26.1 in /website/client (#14356)
Bumps [core-js](https://github.com/zloirock/core-js/tree/HEAD/packages/core-js) from 3.26.0 to 3.26.1.
- [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/commits/v3.26.1/packages/core-js)

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

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Sabe Jones <sabrecat@gmail.com>
2022-12-15 15:28:46 -06:00
Megan Searles 2eb7bab1dd WIP remove challenge tag from list if not in use (#14147)
* if tag not in use after leaving challenge, delete

* fix(tags): correct routing in store actions

Co-authored-by: Megan Shepherd <meg.d.shep@gmail.com>
Co-authored-by: SabreCat <sabe@habitica.com>
2022-12-15 15:17:00 -06:00
dependabot[bot] 0224ce7e3e build(deps): bump chai from 4.3.6 to 4.3.7 in /website/client (#14363)
Bumps [chai](https://github.com/chaijs/chai) from 4.3.6 to 4.3.7.
- [Release notes](https://github.com/chaijs/chai/releases)
- [Changelog](https://github.com/chaijs/chai/blob/4.x.x/History.md)
- [Commits](https://github.com/chaijs/chai/compare/v4.3.6...v4.3.7)

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

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-12-15 15:13:25 -06:00
dependabot[bot] 0cbc2b5ffc build(deps): bump loader-utils from 2.0.3 to 2.0.4 (#14365)
Bumps [loader-utils](https://github.com/webpack/loader-utils) from 2.0.3 to 2.0.4.
- [Release notes](https://github.com/webpack/loader-utils/releases)
- [Changelog](https://github.com/webpack/loader-utils/blob/v2.0.4/CHANGELOG.md)
- [Commits](https://github.com/webpack/loader-utils/compare/v2.0.3...v2.0.4)

---
updated-dependencies:
- dependency-name: loader-utils
  dependency-type: indirect
...

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-12-15 15:13:06 -06:00
SabreCat 1f59d95465 Merge branch 'sabrecat/pass-change-max' into release 2022-12-15 15:02:05 -06:00
tvday cdd1bf1cf0 added field to updates to remove rewarded gear from pinned items, if present (#14406) 2022-12-15 14:48:22 -06:00
Patrick Delaney 7309ab4fd4 Update title in beforeDestroy() (#14408) 2022-12-15 14:48:08 -06:00
Adam Fitzgibbon 42e0bad4ac added validation for blocked users when inviting to groups by username (#14316) 2022-12-15 14:47:54 -06:00
dependabot[bot] 41cd99c920 build(deps): bump @babel/core from 7.19.6 to 7.20.5 (#14380)
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.19.6 to 7.20.5.
- [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.20.5/packages/babel-core)

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

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-12-15 14:39:23 -06:00
dependabot[bot] 0902c63a79 build(deps): bump decode-uri-component in /website/client (#14384)
Bumps [decode-uri-component](https://github.com/SamVerschueren/decode-uri-component) from 0.2.0 to 0.2.2.
- [Release notes](https://github.com/SamVerschueren/decode-uri-component/releases)
- [Commits](https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.0...v0.2.2)

---
updated-dependencies:
- dependency-name: decode-uri-component
  dependency-type: indirect
...

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-12-15 14:39:01 -06:00
Phillip Thelen b97da5fe57 Add support for getting chat limit from database (#14392)
* Add support for getting chat limit from database

* fix lint error
2022-12-15 14:38:28 -06:00
dependabot[bot] 8a76561259 build(deps-dev): bump chalk from 5.1.2 to 5.2.0 (#14401)
Bumps [chalk](https://github.com/chalk/chalk) from 5.1.2 to 5.2.0.
- [Release notes](https://github.com/chalk/chalk/releases)
- [Commits](https://github.com/chalk/chalk/compare/v5.1.2...v5.2.0)

---
updated-dependencies:
- dependency-name: chalk
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-12-15 14:37:39 -06:00
dependabot[bot] d345e0d4a4 build(deps): bump amplitude-js from 8.21.1 to 8.21.3 in /website/client (#14402)
Bumps [amplitude-js](https://github.com/amplitude/amplitude-javascript) from 8.21.1 to 8.21.3.
- [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.21.1...v8.21.3)

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

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-12-15 14:37:11 -06:00
dependabot[bot] 65ee50739f build(deps): bump superagent from 8.0.5 to 8.0.6 (#14403)
Bumps [superagent](https://github.com/ladjs/superagent) from 8.0.5 to 8.0.6.
- [Release notes](https://github.com/ladjs/superagent/releases)
- [Changelog](https://github.com/ladjs/superagent/blob/master/HISTORY.md)
- [Commits](https://github.com/ladjs/superagent/compare/v8.0.5...v8.0.6)

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

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-12-15 14:36:53 -06:00
Phillip Thelen 2c9ee04c6d Optimise chat storage by not storing both equipped and costume (#14409)
* don’t store both equipped and costume

* fix lint
2022-12-15 14:30:15 -06:00
SabreCat 3893d38583 4.252.2 2022-12-15 14:04:45 -06:00
SabreCat 1587827b22 Merge branch 'develop' into release 2022-12-15 14:04:11 -06:00
SabreCat cfdef760d5 Revert "build(deps): bump passport from 0.5.0 to 0.6.0 (#14357)"
This reverts commit cf9fbd43bb.
2022-12-15 14:03:54 -06:00
Sabe Jones eb2cb9e921 Refactor FAQ (#14372)
* refactor(faq): fetch from API on web
Also make question list more maintainable, allowing different questions across platforms

* fix(tests): don't return null when function is expected
Also removes the unnecessary default to web in controller

* fix(tests): add new fields to expectation, add placeholders

* refactor(faq): allow reordering

Co-authored-by: SabreCat <sabe@habitica.com>
2022-12-15 11:34:07 -06:00
SabreCat 591279c1a8 fix(dates): correct inconsistency 2022-12-15 09:00:12 -06:00
SabreCat ee91780f20 fix(typo): tomorrow and tomorrow 2022-12-14 14:41:33 -06:00
SabreCat a9629bdc0a 4.252.1 2022-12-14 14:13:42 -06:00
SabreCat 9c10cb3b88 chore(event): enable G1G1 promo 2022-12-14 14:13:36 -06:00
SabreCat 2d1fca402b 4.252.0 2022-12-13 14:51:53 -06:00
SabreCat a774d32b8a chore(subproj): update habitica-images 2022-12-13 14:51:42 -06:00
Natalie L 573c932565 chore(content): add Polar Pro achievement (#14399)
* chore(content): add Polar Pro achievement

* chore(script): add migration script

* fix(typo): rogue backticks

* fix(capitalization): revert css blurp

* fix(migration): no babby wuff

Co-authored-by: Sabe Jones <sabrecat@gmail.com>
Co-authored-by: SabreCat <sabe@habitica.com>
2022-12-13 14:50:53 -06:00
SabreCat df25e0574d fix(auth): enforce max pass length at update 2022-12-05 16:36:42 -06:00
79 changed files with 6202 additions and 4990 deletions
@@ -0,0 +1,108 @@
/* eslint-disable no-console */
const MIGRATION_NAME = '20221213_pet_group_achievements';
import { model as User } from '../../../website/server/models/user';
const progressCount = 1000;
let count = 0;
async function updateUser (user) {
count++;
const set = {
migration: MIGRATION_NAME,
};
if (user && user.items && user.items.pets) {
const pets = user.items.pets;
if (pets['BearCub-Base']
&& pets['BearCub-CottonCandyBlue']
&& pets['BearCub-CottonCandyPink']
&& pets['BearCub-Desert']
&& pets['BearCub-Golden']
&& pets['BearCub-Red']
&& pets['BearCub-Shade']
&& pets['BearCub-Skeleton']
&& pets['BearCub-White']
&& pets['BearCub-Zombie']
&& pets['Fox-Base']
&& pets['Fox-CottonCandyBlue']
&& pets['Fox-CottonCandyPink']
&& pets['Fox-Desert']
&& pets['Fox-Golden']
&& pets['Fox-Red']
&& pets['Fox-Shade']
&& pets['Fox-Skeleton']
&& pets['Fox-White']
&& pets['Fox-Zombie']
&& pets['Penguin-Base']
&& pets['Penguin-CottonCandyBlue']
&& pets['Penguin-CottonCandyPink']
&& pets['Penguin-Desert']
&& pets['Penguin-Golden']
&& pets['Penguin-Red']
&& pets['Penguin-Shade']
&& pets['Penguin-Skeleton']
&& pets['Penguin-White']
&& pets['Penguin-Zombie']
&& pets['Whale-Base']
&& pets['Whale-CottonCandyBlue']
&& pets['Whale-CottonCandyPink']
&& pets['Whale-Desert']
&& pets['Whale-Golden']
&& pets['Whale-Red']
&& pets['Whale-Shade']
&& pets['Whale-Skeleton']
&& pets['Whale-White']
&& pets['Whale-Zombie']
&& pets['Wolf-Base']
&& pets['Wolf-CottonCandyBlue']
&& pets['Wolf-CottonCandyPink']
&& pets['Wolf-Desert']
&& pets['Wolf-Golden']
&& pets['Wolf-Red']
&& pets['Wolf-Shade']
&& pets['Wolf-Skeleton']
&& pets['Wolf-White']
&& pets['Wolf-Zombie'] {
set['achievements.polarPro'] = true;
}
}
if (count % progressCount === 0) console.warn(`${count} ${user._id}`);
return await User.update({ _id: user._id }, { $set: set }).exec();
}
export default async function processUsers () {
let query = {
// migration: { $ne: MIGRATION_NAME },
'auth.timestamps.loggedin': { $gt: new Date('2022-11-01') },
};
const fields = {
_id: 1,
items: 1,
};
while (true) { // eslint-disable-line no-constant-condition
const users = await User // eslint-disable-line no-await-in-loop
.find(query)
.limit(250)
.sort({_id: 1})
.select(fields)
.lean()
.exec();
if (users.length === 0) {
console.warn('All appropriate users found and modified.');
console.warn(`\n${count} users processed\n`);
break;
} else {
query._id = {
$gt: users[users.length - 1]._id,
};
}
await Promise.all(users.map(updateUser)); // eslint-disable-line no-await-in-loop
}
};
+144
View File
@@ -0,0 +1,144 @@
/* eslint-disable no-console */
const MIGRATION_NAME = '20221227_nye';
import { model as User } from '../../../website/server/models/user';
import { v4 as uuid } from 'uuid';
const progressCount = 1000;
let count = 0;
async function updateUser (user) {
count++;
const set = { migration: MIGRATION_NAME };
let push;
if (typeof user.items.gear.owned.head_special_nye2021 !== 'undefined') {
set['items.gear.owned.head_special_nye2022'] = false;
push = [
{
type: 'marketGear',
path: 'gear.flat.head_special_nye2022',
_id: uuid(),
},
];
} else if (typeof user.items.gear.owned.head_special_nye2020 !== 'undefined') {
set['items.gear.owned.head_special_nye2021'] = false;
push = [
{
type: 'marketGear',
path: 'gear.flat.head_special_nye2021',
_id: uuid(),
},
];
} else if (typeof user.items.gear.owned.head_special_nye2019 !== 'undefined') {
set['items.gear.owned.head_special_nye2020'] = false;
push = [
{
type: 'marketGear',
path: 'gear.flat.head_special_nye2020',
_id: uuid(),
},
];
} else if (typeof user.items.gear.owned.head_special_nye2018 !== 'undefined') {
set['items.gear.owned.head_special_nye2019'] = false;
push = [
{
type: 'marketGear',
path: 'gear.flat.head_special_nye2019',
_id: uuid(),
},
];
} else if (typeof user.items.gear.owned.head_special_nye2017 !== 'undefined') {
set['items.gear.owned.head_special_nye2018'] = false;
push = [
{
type: 'marketGear',
path: 'gear.flat.head_special_nye2018',
_id: uuid(),
},
];
} else if (typeof user.items.gear.owned.head_special_nye2016 !== 'undefined') {
set['items.gear.owned.head_special_nye2017'] = false;
push = [
{
type: 'marketGear',
path: 'gear.flat.head_special_nye2017',
_id: uuid(),
},
];
} else if (typeof user.items.gear.owned.head_special_nye2015 !== 'undefined') {
set['items.gear.owned.head_special_nye2016'] = false;
push = [
{
type: 'marketGear',
path: 'gear.flat.head_special_nye2016',
_id: uuid(),
},
];
} else if (typeof user.items.gear.owned.head_special_nye2014 !== 'undefined') {
set['items.gear.owned.head_special_nye2015'] = false;
push = [
{
type: 'marketGear',
path: 'gear.flat.head_special_nye2015',
_id: uuid(),
},
];
} else if (typeof user.items.gear.owned.head_special_nye !== 'undefined') {
set['items.gear.owned.head_special_nye2014'] = false;
push = [
{
type: 'marketGear',
path: 'gear.flat.head_special_nye2014',
_id: uuid(),
},
];
} else {
set['items.gear.owned.head_special_nye'] = false;
push = [
{
type: 'marketGear',
path: 'gear.flat.head_special_nye',
_id: uuid(),
},
];
}
if (count % progressCount === 0) console.warn(`${count} ${user._id}`);
return await User.update({_id: user._id}, {$set: set, $push: {pinnedItems: {$each: push}}}).exec();
}
export default async function processUsers () {
let query = {
'auth.timestamps.loggedin': {$gt: new Date('2022-12-01')},
migration: {$ne: MIGRATION_NAME},
};
const fields = {
_id: 1,
items: 1,
};
while (true) { // eslint-disable-line no-constant-condition
const users = await User // eslint-disable-line no-await-in-loop
.find(query)
.limit(250)
.sort({_id: 1})
.select(fields)
.lean()
.exec();
if (users.length === 0) {
console.warn('All appropriate users found and modified.');
console.warn(`\n${count} users processed\n`);
break;
} else {
query._id = {
$gt: users[users.length - 1],
};
}
await Promise.all(users.map(updateUser)); // eslint-disable-line no-await-in-loop
}
};
+122 -215
View File
@@ -1,6 +1,6 @@
{
"name": "habitica",
"version": "4.251.0",
"version": "4.254.2",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -27,20 +27,20 @@
"integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ=="
},
"@babel/core": {
"version": "7.19.6",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.6.tgz",
"integrity": "sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==",
"version": "7.20.5",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.5.tgz",
"integrity": "sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==",
"requires": {
"@ampproject/remapping": "^2.1.0",
"@babel/code-frame": "^7.18.6",
"@babel/generator": "^7.19.6",
"@babel/helper-compilation-targets": "^7.19.3",
"@babel/helper-module-transforms": "^7.19.6",
"@babel/helpers": "^7.19.4",
"@babel/parser": "^7.19.6",
"@babel/generator": "^7.20.5",
"@babel/helper-compilation-targets": "^7.20.0",
"@babel/helper-module-transforms": "^7.20.2",
"@babel/helpers": "^7.20.5",
"@babel/parser": "^7.20.5",
"@babel/template": "^7.18.10",
"@babel/traverse": "^7.19.6",
"@babel/types": "^7.19.4",
"@babel/traverse": "^7.20.5",
"@babel/types": "^7.20.5",
"convert-source-map": "^1.7.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
@@ -56,69 +56,16 @@
"@babel/highlight": "^7.18.6"
}
},
"@babel/compat-data": {
"version": "7.20.1",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz",
"integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ=="
},
"@babel/generator": {
"version": "7.20.1",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.1.tgz",
"integrity": "sha512-u1dMdBUmA7Z0rBB97xh8pIhviK7oItYOkjbsCxTWMknyvbQRBwX7/gn4JXurRdirWMFh+ZtYARqkA6ydogVZpg==",
"version": "7.20.5",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz",
"integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==",
"requires": {
"@babel/types": "^7.20.0",
"@babel/types": "^7.20.5",
"@jridgewell/gen-mapping": "^0.3.2",
"jsesc": "^2.5.1"
}
},
"@babel/helper-compilation-targets": {
"version": "7.20.0",
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz",
"integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==",
"requires": {
"@babel/compat-data": "^7.20.0",
"@babel/helper-validator-option": "^7.18.6",
"browserslist": "^4.21.3",
"semver": "^6.3.0"
}
},
"@babel/helper-function-name": {
"version": "7.19.0",
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz",
"integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==",
"requires": {
"@babel/template": "^7.18.10",
"@babel/types": "^7.19.0"
}
},
"@babel/helper-module-transforms": {
"version": "7.19.6",
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz",
"integrity": "sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==",
"requires": {
"@babel/helper-environment-visitor": "^7.18.9",
"@babel/helper-module-imports": "^7.18.6",
"@babel/helper-simple-access": "^7.19.4",
"@babel/helper-split-export-declaration": "^7.18.6",
"@babel/helper-validator-identifier": "^7.19.1",
"@babel/template": "^7.18.10",
"@babel/traverse": "^7.19.6",
"@babel/types": "^7.19.4"
}
},
"@babel/helper-simple-access": {
"version": "7.19.4",
"resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz",
"integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==",
"requires": {
"@babel/types": "^7.19.4"
}
},
"@babel/helper-string-parser": {
"version": "7.19.4",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz",
"integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw=="
},
"@babel/helper-validator-identifier": {
"version": "7.19.1",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
@@ -135,41 +82,31 @@
}
},
"@babel/parser": {
"version": "7.20.1",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.1.tgz",
"integrity": "sha512-hp0AYxaZJhxULfM1zyp7Wgr+pSUKBcP3M+PHnSzWGdXOzg/kHWIgiUWARvubhUKGOEw3xqY4x+lyZ9ytBVcELw=="
},
"@babel/template": {
"version": "7.18.10",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz",
"integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==",
"requires": {
"@babel/code-frame": "^7.18.6",
"@babel/parser": "^7.18.10",
"@babel/types": "^7.18.10"
}
"version": "7.20.5",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz",
"integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA=="
},
"@babel/traverse": {
"version": "7.20.1",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz",
"integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==",
"version": "7.20.5",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz",
"integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==",
"requires": {
"@babel/code-frame": "^7.18.6",
"@babel/generator": "^7.20.1",
"@babel/generator": "^7.20.5",
"@babel/helper-environment-visitor": "^7.18.9",
"@babel/helper-function-name": "^7.19.0",
"@babel/helper-hoist-variables": "^7.18.6",
"@babel/helper-split-export-declaration": "^7.18.6",
"@babel/parser": "^7.20.1",
"@babel/types": "^7.20.0",
"@babel/parser": "^7.20.5",
"@babel/types": "^7.20.5",
"debug": "^4.1.0",
"globals": "^11.1.0"
}
},
"@babel/types": {
"version": "7.20.0",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.0.tgz",
"integrity": "sha512-Jlgt3H0TajCW164wkTOTzHkZb075tMQMULzrLUoUeKmO7eFL96GgDxf7/Axhc5CAuKE3KFyVW1p6ysKsi2oXAg==",
"version": "7.20.5",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz",
"integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==",
"requires": {
"@babel/helper-string-parser": "^7.19.4",
"@babel/helper-validator-identifier": "^7.19.1",
@@ -186,22 +123,6 @@
"@jridgewell/trace-mapping": "^0.3.9"
}
},
"browserslist": {
"version": "4.21.4",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz",
"integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==",
"requires": {
"caniuse-lite": "^1.0.30001400",
"electron-to-chromium": "^1.4.251",
"node-releases": "^2.0.6",
"update-browserslist-db": "^1.0.9"
}
},
"caniuse-lite": {
"version": "1.0.30001429",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001429.tgz",
"integrity": "sha512-511ThLu1hF+5RRRt0zYCf2U2yRr9GPF6m5y90SBCWsvSoYoW7yAGlv/elyPaNfvGCkp6kj/KFZWU0BMA69Prsg=="
},
"chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
@@ -216,15 +137,6 @@
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
},
"update-browserslist-db": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
"integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
"requires": {
"escalade": "^3.1.1",
"picocolors": "^1.0.0"
}
}
}
},
@@ -669,13 +581,13 @@
}
},
"@babel/helpers": {
"version": "7.20.1",
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz",
"integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==",
"version": "7.20.6",
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz",
"integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==",
"requires": {
"@babel/template": "^7.18.10",
"@babel/traverse": "^7.20.1",
"@babel/types": "^7.20.0"
"@babel/traverse": "^7.20.5",
"@babel/types": "^7.20.5"
},
"dependencies": {
"@babel/code-frame": {
@@ -687,29 +599,15 @@
}
},
"@babel/generator": {
"version": "7.20.1",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.1.tgz",
"integrity": "sha512-u1dMdBUmA7Z0rBB97xh8pIhviK7oItYOkjbsCxTWMknyvbQRBwX7/gn4JXurRdirWMFh+ZtYARqkA6ydogVZpg==",
"version": "7.20.5",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz",
"integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==",
"requires": {
"@babel/types": "^7.20.0",
"@babel/types": "^7.20.5",
"@jridgewell/gen-mapping": "^0.3.2",
"jsesc": "^2.5.1"
}
},
"@babel/helper-function-name": {
"version": "7.19.0",
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz",
"integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==",
"requires": {
"@babel/template": "^7.18.10",
"@babel/types": "^7.19.0"
}
},
"@babel/helper-string-parser": {
"version": "7.19.4",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz",
"integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw=="
},
"@babel/helper-validator-identifier": {
"version": "7.19.1",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
@@ -726,41 +624,31 @@
}
},
"@babel/parser": {
"version": "7.20.1",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.1.tgz",
"integrity": "sha512-hp0AYxaZJhxULfM1zyp7Wgr+pSUKBcP3M+PHnSzWGdXOzg/kHWIgiUWARvubhUKGOEw3xqY4x+lyZ9ytBVcELw=="
},
"@babel/template": {
"version": "7.18.10",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz",
"integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==",
"requires": {
"@babel/code-frame": "^7.18.6",
"@babel/parser": "^7.18.10",
"@babel/types": "^7.18.10"
}
"version": "7.20.5",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz",
"integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA=="
},
"@babel/traverse": {
"version": "7.20.1",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz",
"integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==",
"version": "7.20.5",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz",
"integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==",
"requires": {
"@babel/code-frame": "^7.18.6",
"@babel/generator": "^7.20.1",
"@babel/generator": "^7.20.5",
"@babel/helper-environment-visitor": "^7.18.9",
"@babel/helper-function-name": "^7.19.0",
"@babel/helper-hoist-variables": "^7.18.6",
"@babel/helper-split-export-declaration": "^7.18.6",
"@babel/parser": "^7.20.1",
"@babel/types": "^7.20.0",
"@babel/parser": "^7.20.5",
"@babel/types": "^7.20.5",
"debug": "^4.1.0",
"globals": "^11.1.0"
}
},
"@babel/types": {
"version": "7.20.0",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.0.tgz",
"integrity": "sha512-Jlgt3H0TajCW164wkTOTzHkZb075tMQMULzrLUoUeKmO7eFL96GgDxf7/Axhc5CAuKE3KFyVW1p6ysKsi2oXAg==",
"version": "7.20.5",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz",
"integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==",
"requires": {
"@babel/helper-string-parser": "^7.19.4",
"@babel/helper-validator-identifier": "^7.19.1",
@@ -1978,6 +1866,11 @@
"requires": {
"lru-cache": "^6.0.0"
}
},
"uuid": {
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
}
}
},
@@ -1989,6 +1882,13 @@
"@opencensus/core": "^0.1.0",
"hex2dec": "^1.0.1",
"uuid": "^8.0.0"
},
"dependencies": {
"uuid": {
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
}
}
},
"@panva/asn1.js": {
@@ -2047,23 +1947,12 @@
}
},
"@sinonjs/fake-timers": {
"version": "9.1.2",
"resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz",
"integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==",
"version": "10.0.2",
"resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz",
"integrity": "sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==",
"dev": true,
"requires": {
"@sinonjs/commons": "^1.7.0"
},
"dependencies": {
"@sinonjs/commons": {
"version": "1.8.5",
"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.5.tgz",
"integrity": "sha512-rTpCA0wG1wUxglBSFdMMY0oTrKYvgf4fNgv/sXbfCVAdf+FnPBdKJR/7XbpTCwbCrvCbdPYnlWaUUYz4V2fPDA==",
"dev": true,
"requires": {
"type-detect": "4.0.8"
}
}
"@sinonjs/commons": "^2.0.0"
}
},
"@sinonjs/samsam": {
@@ -3168,19 +3057,20 @@
"integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA=="
},
"axios": {
"version": "0.27.2",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz",
"integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==",
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.2.1.tgz",
"integrity": "sha512-I88cFiGu9ryt/tfVEi4kX2SITsvDddTajXTOFmt2uK1ZVA8LytjtdeyefdQWEf5PU8w+4SSJDoYnggflB5tW4A==",
"dev": true,
"requires": {
"follow-redirects": "^1.14.9",
"form-data": "^4.0.0"
"follow-redirects": "^1.15.0",
"form-data": "^4.0.0",
"proxy-from-env": "^1.1.0"
},
"dependencies": {
"follow-redirects": {
"version": "1.14.9",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz",
"integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==",
"version": "1.15.2",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
"integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
"dev": true
}
}
@@ -4321,9 +4211,9 @@
}
},
"chalk": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-5.1.2.tgz",
"integrity": "sha512-E5CkT4jWURs1Vy5qGJye+XwCkNj7Od3Af7CP6SujMetSMkLs8Do2RWJK5yx1wamHV/op8Rz+9rltjaTQWDnEFQ==",
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz",
"integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==",
"dev": true
},
"chardet": {
@@ -10108,9 +9998,9 @@
"integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg=="
},
"loader-utils": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.3.tgz",
"integrity": "sha512-THWqIsn8QRnvLl0shHYVBN9syumU8pYWEHPTmkiVGd+7K5eFNVSY6AJhRvgGF70gg1Dz+l/k8WicvFCxdEs60A==",
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
"integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
"requires": {
"big.js": "^5.2.2",
"emojis-list": "^3.0.0",
@@ -11411,9 +11301,9 @@
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
},
"nise": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/nise/-/nise-5.1.2.tgz",
"integrity": "sha512-+gQjFi8v+tkfCuSCxfURHLhRhniE/+IaYbIphxAN2JRR9SHKhY8hgXpaXiYfHdw+gcGe4buxgbprBQFab9FkhA==",
"version": "5.1.3",
"resolved": "https://registry.npmjs.org/nise/-/nise-5.1.3.tgz",
"integrity": "sha512-U597iWTTBBYIV72986jyU382/MMZ70ApWcRmkoF1AZ75bpqOtI3Gugv/6+0jLgoDOabmcSwYBkSSAWIp1eA5cg==",
"dev": true,
"requires": {
"@sinonjs/commons": "^2.0.0",
@@ -11433,9 +11323,9 @@
},
"dependencies": {
"@sinonjs/commons": {
"version": "1.8.5",
"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.5.tgz",
"integrity": "sha512-rTpCA0wG1wUxglBSFdMMY0oTrKYvgf4fNgv/sXbfCVAdf+FnPBdKJR/7XbpTCwbCrvCbdPYnlWaUUYz4V2fPDA==",
"version": "1.8.6",
"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz",
"integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==",
"dev": true,
"requires": {
"type-detect": "4.0.8"
@@ -12097,13 +11987,12 @@
"integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
},
"passport": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/passport/-/passport-0.6.0.tgz",
"integrity": "sha512-0fe+p3ZnrWRW74fe8+SvCyf4a3Pb2/h7gFkQ8yTJpAO50gDzlfjZUZTO1k5Eg9kUct22OxHLqDZoKUWRHOh9ug==",
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/passport/-/passport-0.5.0.tgz",
"integrity": "sha512-ln+ue5YaNDS+fes6O5PCzXKSseY5u8MYhX9H5Co4s+HfYI5oqvnHKoOORLYDUPh+8tHvrxugF2GFcUA1Q1Gqfg==",
"requires": {
"passport-strategy": "1.x.x",
"pause": "0.0.1",
"utils-merge": "^1.0.1"
"pause": "0.0.1"
}
},
"passport-facebook": {
@@ -12214,7 +12103,7 @@
"pause": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz",
"integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg=="
"integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10="
},
"pause-stream": {
"version": "0.0.11",
@@ -12459,6 +12348,12 @@
"ipaddr.js": "1.9.1"
}
},
"proxy-from-env": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
"dev": true
},
"ps-tree": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz",
@@ -13543,6 +13438,13 @@
"requires": {
"any-base": "^1.1.0",
"uuid": "^8.3.2"
},
"dependencies": {
"uuid": {
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
}
}
},
"side-channel": {
@@ -13630,13 +13532,13 @@
}
},
"sinon": {
"version": "14.0.2",
"resolved": "https://registry.npmjs.org/sinon/-/sinon-14.0.2.tgz",
"integrity": "sha512-PDpV0ZI3ZCS3pEqx0vpNp6kzPhHrLx72wA0G+ZLaaJjLIYeE0n8INlgaohKuGy7hP0as5tbUd23QWu5U233t+w==",
"version": "15.0.1",
"resolved": "https://registry.npmjs.org/sinon/-/sinon-15.0.1.tgz",
"integrity": "sha512-PZXKc08f/wcA/BMRGBze2Wmw50CWPiAH3E21EOi4B49vJ616vW4DQh4fQrqsYox2aNR/N3kCqLuB0PwwOucQrg==",
"dev": true,
"requires": {
"@sinonjs/commons": "^2.0.0",
"@sinonjs/fake-timers": "^9.1.2",
"@sinonjs/fake-timers": "10.0.2",
"@sinonjs/samsam": "^7.0.1",
"diff": "^5.0.0",
"nise": "^5.1.2",
@@ -14289,9 +14191,9 @@
}
},
"stripe": {
"version": "10.13.0",
"resolved": "https://registry.npmjs.org/stripe/-/stripe-10.13.0.tgz",
"integrity": "sha512-Uq+hToFOXHU+BHgzUmop2Monc0dM8pluXcoCOrgz9oY8XBDnSPOuXAJdKa04x5DCEgKWrFMHncQfAgwqzSgaTQ==",
"version": "11.4.0",
"resolved": "https://registry.npmjs.org/stripe/-/stripe-11.4.0.tgz",
"integrity": "sha512-8feL70RhzN6i8rpUG5SC4ZN5KcPYCUfRYRk/yUcnHG8uLdS26AgKXAEozqddDGUUufRPKYuqs44kPg21/P5JRg==",
"requires": {
"@types/node": ">=8.1.0",
"qs": "^6.11.0"
@@ -14318,16 +14220,16 @@
"integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ=="
},
"superagent": {
"version": "8.0.5",
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.5.tgz",
"integrity": "sha512-lQVE0Praz7nHiSaJLKBM/cZyi7J0E4io8tWnGSBdBrqAzhzrjQ/F5iGP9Zr29CJC8N5zYdhG2kKaNcB6dKxp7g==",
"version": "8.0.6",
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.6.tgz",
"integrity": "sha512-HqSe6DSIh3hEn6cJvCkaM1BLi466f1LHi4yubR0tpewlMpk4RUFFy35bKz8SsPBwYfIIJy5eclp+3tCYAuX0bw==",
"requires": {
"component-emitter": "^1.3.0",
"cookiejar": "^2.1.3",
"debug": "^4.3.4",
"fast-safe-stringify": "^2.1.1",
"form-data": "^4.0.0",
"formidable": "^2.0.1",
"formidable": "^2.1.1",
"methods": "^1.1.2",
"mime": "2.6.0",
"qs": "^6.11.0",
@@ -15242,6 +15144,11 @@
"requires": {
"ms": "2.1.2"
}
},
"uuid": {
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
}
}
},
@@ -15480,9 +15387,9 @@
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
},
"uuid": {
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz",
"integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg=="
},
"v8-compile-cache": {
"version": "2.1.1",
+9 -9
View File
@@ -1,10 +1,10 @@
{
"name": "habitica",
"description": "A habit tracker app which treats your goals like a Role Playing Game.",
"version": "4.251.0",
"version": "4.254.2",
"main": "./website/server/index.js",
"dependencies": {
"@babel/core": "^7.19.6",
"@babel/core": "^7.20.5",
"@babel/preset-env": "^7.20.2",
"@babel/register": "^7.18.9",
"@google-cloud/trace-agent": "^7.1.2",
@@ -54,7 +54,7 @@
"nconf": "^0.12.0",
"node-gcm": "^1.0.5",
"on-headers": "^1.0.2",
"passport": "^0.6.0",
"passport": "^0.5.0",
"passport-facebook": "^3.0.0",
"passport-google-oauth2": "^0.2.0",
"passport-google-oauth20": "2.0.0",
@@ -67,11 +67,11 @@
"remove-markdown": "^0.5.0",
"rimraf": "^3.0.2",
"short-uuid": "^4.2.2",
"stripe": "^10.13.0",
"superagent": "^8.0.5",
"stripe": "^11.4.0",
"superagent": "^8.0.6",
"universal-analytics": "^0.5.3",
"useragent": "^2.1.9",
"uuid": "^8.3.2",
"uuid": "^9.0.0",
"validator": "^13.7.0",
"vinyl-buffer": "^1.0.1",
"winston": "^3.8.2",
@@ -110,11 +110,11 @@
"apidoc": "gulp apidoc"
},
"devDependencies": {
"axios": "^0.27.2",
"axios": "^1.2.1",
"chai": "^4.3.7",
"chai-as-promised": "^7.1.1",
"chai-moment": "^0.1.0",
"chalk": "^5.1.2",
"chalk": "^5.2.0",
"cross-spawn": "^7.0.3",
"expect.js": "^0.3.1",
"istanbul": "^1.1.0-alpha.1",
@@ -122,7 +122,7 @@
"monk": "^7.3.4",
"require-again": "^2.0.0",
"run-rs": "^0.7.7",
"sinon": "^14.0.2",
"sinon": "^15.0.1",
"sinon-chai": "^3.7.0",
"sinon-stub-promise": "^4.0.0"
},
@@ -541,6 +541,35 @@ describe('POST /chat', () => {
.to.eql(userWithStyle.preferences.background);
});
it('creates equipped to user styles', async () => {
const userWithStyle = await generateUser({
'preferences.costume': false,
'auth.timestamps.created': new Date('2022-01-01'),
});
await userWithStyle.sync();
const message = await userWithStyle.post(`/groups/${groupWithChat._id}/chat`, { message: testMessage });
expect(message.message.id).to.exist;
expect(message.message.userStyles.items.gear.equipped)
.to.eql(userWithStyle.items.gear.equipped);
expect(message.message.userStyles.items.gear.costume).to.not.exist;
});
it('creates costume to user styles', async () => {
const userWithStyle = await generateUser({
'preferences.costume': true,
'auth.timestamps.created': new Date('2022-01-01'),
});
await userWithStyle.sync();
const message = await userWithStyle.post(`/groups/${groupWithChat._id}/chat`, { message: testMessage });
expect(message.message.id).to.exist;
expect(message.message.userStyles.items.gear.costume).to.eql(userWithStyle.items.gear.costume);
expect(message.message.userStyles.items.gear.equipped).to.not.exist;
});
it('adds backer info to chat', async () => {
const backerInfo = {
npc: 'Town Crier',
@@ -48,6 +48,19 @@ describe('Post /groups/:groupId/invite', () => {
});
});
it('returns error when recipient has blocked the senders', async () => {
const inviterNoBlocks = await inviter.update({ 'inbox.blocks': [] });
const userWithBlockedInviter = await generateUser({ 'inbox.blocks': [inviter._id] });
await expect(inviterNoBlocks.post(`/groups/${group._id}/invite`, {
usernames: [userWithBlockedInviter.auth.local.lowerCaseUsername],
}))
.to.eventually.be.rejected.and.eql({
code: 401,
error: 'NotAuthorized',
message: t('notAuthorizedToSendMessageToThisUser'),
});
});
it('invites a user to a group by username', async () => {
const userToInvite = await generateUser();
@@ -96,6 +96,20 @@ describe('PUT /user/auth/update-password', async () => {
});
});
it('returns an error when newPassword is too long', async () => {
const body = {
password,
newPassword: '12345678910111213141516171819202122232425262728293031323334353637383940',
confirmPassword: '12345678910111213141516171819202122232425262728293031323334353637383940',
};
await expect(user.put(ENDPOINT, body)).to.eventually.be.rejected.and.eql({
code: 400,
error: 'BadRequest',
message: t('invalidReqParams'),
});
});
it('returns an error when confirmPassword is missing', async () => {
const body = {
password,
+4
View File
@@ -37,6 +37,8 @@ describe('GET /faq', () => {
expect(res).to.have.property('questions');
expect(res.questions[0]).to.eql({
exclusions: [],
heading: 'overview',
question: translate('faqQuestion0'),
ios: translate('iosFaqAnswer0'),
});
@@ -57,6 +59,8 @@ describe('GET /faq', () => {
expect(res).to.have.property('questions');
expect(res.questions[0]).to.eql({
exclusions: [],
heading: 'overview',
question: translate('faqQuestion0'),
android: translate('androidFaqAnswer0'),
});
+4821 -4473
View File
File diff suppressed because it is too large Load Diff
+5 -5
View File
@@ -18,21 +18,21 @@
"@storybook/addon-links": "6.5.8",
"@storybook/addon-notes": "5.3.21",
"@storybook/addons": "6.5.9",
"@storybook/vue": "6.3.13",
"@storybook/vue": "6.5.14",
"@vue/cli-plugin-babel": "^4.5.15",
"@vue/cli-plugin-eslint": "^4.5.19",
"@vue/cli-plugin-router": "^5.0.8",
"@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.21.1",
"amplitude-js": "^8.21.3",
"axios": "^0.27.2",
"axios-progress-bar": "^1.2.0",
"babel-eslint": "^10.1.0",
"bootstrap": "^4.6.0",
"bootstrap-vue": "^2.22.0",
"chai": "^4.3.6",
"core-js": "^3.26.0",
"bootstrap-vue": "^2.23.1",
"chai": "^4.3.7",
"core-js": "^3.26.1",
"dompurify": "^2.4.1",
"eslint": "^6.8.0",
"eslint-config-habitrpg": "^6.2.0",
@@ -293,6 +293,11 @@
width: 48px;
height: 52px;
}
.achievement-polarPro2x {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/achievement-polarPro2x.png');
width: 68px;
height: 68px;
}
.achievement-primedForPainting2x {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/achievement-primedForPainting2x.png');
width: 48px;
@@ -31275,6 +31280,26 @@
width: 117px;
height: 120px;
}
.broad_armor_special_winter2023Healer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_special_winter2023Healer.png');
width: 117px;
height: 120px;
}
.broad_armor_special_winter2023Mage {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_special_winter2023Mage.png');
width: 114px;
height: 90px;
}
.broad_armor_special_winter2023Rogue {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_special_winter2023Rogue.png');
width: 116px;
height: 119px;
}
.broad_armor_special_winter2023Warrior {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_special_winter2023Warrior.png');
width: 114px;
height: 117px;
}
.broad_armor_special_yeti {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_special_yeti.png');
width: 90px;
@@ -31330,6 +31355,11 @@
width: 114px;
height: 90px;
}
.head_special_nye2022 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_nye2022.png');
width: 114px;
height: 90px;
}
.head_special_ski {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_ski.png');
width: 90px;
@@ -31500,6 +31530,26 @@
width: 117px;
height: 120px;
}
.head_special_winter2023Healer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_winter2023Healer.png');
width: 117px;
height: 120px;
}
.head_special_winter2023Mage {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_winter2023Mage.png');
width: 114px;
height: 90px;
}
.head_special_winter2023Rogue {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_winter2023Rogue.png');
width: 116px;
height: 119px;
}
.head_special_winter2023Warrior {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_winter2023Warrior.png');
width: 114px;
height: 117px;
}
.head_special_yeti {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_yeti.png');
width: 90px;
@@ -31635,6 +31685,21 @@
width: 117px;
height: 120px;
}
.shield_special_winter2023Healer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_special_winter2023Healer.png');
width: 117px;
height: 120px;
}
.shield_special_winter2023Rogue {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_special_winter2023Rogue.png');
width: 116px;
height: 119px;
}
.shield_special_winter2023Warrior {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_special_winter2023Warrior.png');
width: 114px;
height: 117px;
}
.shield_special_yeti {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_special_yeti.png');
width: 90px;
@@ -31815,6 +31880,26 @@
width: 68px;
height: 68px;
}
.shop_armor_special_winter2023Healer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_special_winter2023Healer.png');
width: 68px;
height: 68px;
}
.shop_armor_special_winter2023Mage {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_special_winter2023Mage.png');
width: 68px;
height: 68px;
}
.shop_armor_special_winter2023Rogue {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_special_winter2023Rogue.png');
width: 68px;
height: 68px;
}
.shop_armor_special_winter2023Warrior {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_special_winter2023Warrior.png');
width: 68px;
height: 68px;
}
.shop_armor_special_yeti {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_special_yeti.png');
width: 68px;
@@ -31870,6 +31955,11 @@
width: 68px;
height: 68px;
}
.shop_head_special_nye2022 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_special_nye2022.png');
width: 68px;
height: 68px;
}
.shop_head_special_ski {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_special_ski.png');
width: 68px;
@@ -32040,6 +32130,26 @@
width: 68px;
height: 68px;
}
.shop_head_special_winter2023Healer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_special_winter2023Healer.png');
width: 68px;
height: 68px;
}
.shop_head_special_winter2023Mage {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_special_winter2023Mage.png');
width: 68px;
height: 68px;
}
.shop_head_special_winter2023Rogue {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_special_winter2023Rogue.png');
width: 68px;
height: 68px;
}
.shop_head_special_winter2023Warrior {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_special_winter2023Warrior.png');
width: 68px;
height: 68px;
}
.shop_head_special_yeti {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_special_yeti.png');
width: 68px;
@@ -32175,11 +32285,31 @@
width: 68px;
height: 68px;
}
.shop_shield_special_winter2023Healer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_special_winter2023Healer.png');
width: 68px;
height: 68px;
}
.shop_shield_special_winter2023Rogue {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_special_winter2023Rogue.png');
width: 68px;
height: 68px;
}
.shop_shield_special_winter2023Warrior {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_special_winter2023Warrior.png');
width: 68px;
height: 68px;
}
.shop_shield_special_yeti {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_special_yeti.png');
width: 68px;
height: 68px;
}
.shop_weapon_special_Winter2023Rogue {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_special_Winter2023Rogue.png');
width: 68px;
height: 68px;
}
.shop_weapon_special_candycane {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_special_candycane.png');
width: 68px;
@@ -32355,6 +32485,21 @@
width: 68px;
height: 68px;
}
.shop_weapon_special_winter2023Healer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_special_winter2023Healer.png');
width: 68px;
height: 68px;
}
.shop_weapon_special_winter2023Mage {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_special_winter2023Mage.png');
width: 68px;
height: 68px;
}
.shop_weapon_special_winter2023Warrior {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_special_winter2023Warrior.png');
width: 68px;
height: 68px;
}
.shop_weapon_special_yeti {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_special_yeti.png');
width: 68px;
@@ -32535,6 +32680,26 @@
width: 117px;
height: 120px;
}
.slim_armor_special_winter2023Healer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_special_winter2023Healer.png');
width: 117px;
height: 120px;
}
.slim_armor_special_winter2023Mage {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_special_winter2023Mage.png');
width: 114px;
height: 90px;
}
.slim_armor_special_winter2023Rogue {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_special_winter2023Rogue.png');
width: 116px;
height: 119px;
}
.slim_armor_special_winter2023Warrior {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_special_winter2023Warrior.png');
width: 114px;
height: 117px;
}
.slim_armor_special_yeti {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_special_yeti.png');
width: 90px;
@@ -32715,6 +32880,26 @@
width: 117px;
height: 120px;
}
.weapon_special_winter2023Healer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_special_winter2023Healer.png');
width: 117px;
height: 120px;
}
.weapon_special_winter2023Mage {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_special_winter2023Mage.png');
width: 114px;
height: 90px;
}
.weapon_special_winter2023Rogue {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_special_winter2023Rogue.png');
width: 116px;
height: 119px;
}
.weapon_special_winter2023Warrior {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_special_winter2023Warrior.png');
width: 114px;
height: 117px;
}
.weapon_special_yeti {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_special_yeti.png');
width: 90px;
@@ -40,11 +40,6 @@
v-model="hero.auth.blocked"
type="checkbox"
> Ban / Block
<p>
<small>
Banning a user also auto-hides all their guild posts.
</small>
</p>
</label>
</div>
<div class="form-inline">
@@ -50,7 +50,21 @@ export default {
challengeId: this.challengeId,
keep,
});
await this.$store.dispatch('tasks:fetchUserTasks', { forceLoad: true });
const userTasksByType = (await this.$store.dispatch('tasks:fetchUserTasks', { forceLoad: true })).data;
let tagInUse = false;
Object.keys(userTasksByType).forEach(taskType => {
userTasksByType[taskType].forEach(task => {
if (task.tags.indexOf(this.challengeId) > -1) {
tagInUse = true;
}
});
});
if (!tagInUse) {
await this.$store.dispatch(
'tags:deleteTag',
{ tagId: this.challengeId },
);
}
this.close();
},
close () {
+41 -56
View File
@@ -5,40 +5,44 @@
>
<div class="row">
<div class="col-12 col-md-6 offset-md-3">
<h1 id="faq-heading">
<h1
v-once
id="faq-heading"
>
{{ $t('frequentlyAskedQuestions') }}
</h1>
<div
v-for="(heading, index) in headings"
v-for="(entry, index) in faq.questions"
:key="index"
class="faq-question"
>
<div
v-if="heading !== 'world-boss'"
<h2
v-once
v-b-toggle="entry.heading"
role="tab"
variant="info"
@click="handleClick($event)"
>
<h2
v-b-toggle="heading"
role="tab"
variant="info"
@click="handleClick($event)"
>
{{ $t(`faqQuestion${index}`) }}
</h2>
<b-collapse
:id="heading"
:visible="isVisible(heading)"
accordion="faq"
role="tabpanel"
>
<div
v-markdown="$t(`webFaqAnswer${index}`, replacements)"
class="card-body"
></div>
</b-collapse>
</div>
{{ entry.question }}
</h2>
<b-collapse
:id="entry.heading"
:visible="isVisible(entry.heading)"
accordion="faq"
role="tabpanel"
>
<div
v-once
v-markdown="entry.web"
class="card-body"
></div>
</b-collapse>
</div>
<hr>
<p v-markdown="$t('webFaqStillNeedHelp')"></p>
<p
v-once
v-markdown="stillNeedHelp"
></p>
</div>
</div>
</div>
@@ -46,7 +50,7 @@
<style lang='scss' scoped>
.card-body {
margin-bottom: 1em;
margin-bottom: 1em;
}
.faq-question h2 {
@@ -74,53 +78,34 @@
</style>
<script>
// @TODO: env.EMAILS.TECH_ASSISTANCE_EMAIL
import markdownDirective from '@/directives/markdown';
const TECH_ASSISTANCE_EMAIL = 'admin@habitica.com';
export default {
directives: {
markdown: markdownDirective,
},
data () {
const headings = [
'overview',
'set-up-tasks',
'sample-tasks',
'task-color',
'health',
'party-with-friends',
'pets-mounts',
'character-classes',
'blue-mana-bar',
'monsters-quests',
'gems',
'bugs-features',
'world-boss',
'group-plans',
];
const hash = window.location.hash.replace('#', '');
return {
headings,
replacements: {
techAssistanceEmail: TECH_ASSISTANCE_EMAIL,
wikiTechAssistanceEmail: `mailto:${TECH_ASSISTANCE_EMAIL}`,
},
visible: hash && headings.includes(hash) ? hash : null,
faq: {},
headings: [],
stillNeedHelp: '',
};
},
mounted () {
async mounted () {
this.$store.dispatch('common:setTitle', {
section: this.$t('help'),
subSection: this.$t('faq'),
});
this.faq = await this.$store.dispatch('faq:getFAQ');
for (const entry of this.faq.questions) {
this.headings.push(entry.heading);
}
this.stillNeedHelp = this.faq.stillNeedHelp.web;
},
methods: {
isVisible (heading) {
return this.visible && this.visible === heading;
const hash = window.location.hash.replace('#', '');
return hash && this.headings.includes(hash) && hash === heading;
},
handleClick (e) {
if (!e) return;
@@ -863,16 +863,13 @@ export default {
this.loadUser();
this.oldTitle = this.$store.state.title;
this.selectPage(this.startingPage);
this.$root.$on('habitica:restoreTitle', () => {
if (this.oldTitle) {
this.$store.dispatch('common:setTitle', {
fullTitle: this.oldTitle,
});
}
});
},
beforeDestroy () {
this.$root.$off('habitica:restoreTitle');
if (this.oldTitle) {
this.$store.dispatch('common:setTitle', {
fullTitle: this.oldTitle,
});
}
},
methods: {
async loadUser () {
@@ -1028,10 +1025,9 @@ export default {
this.$store.dispatch('hall:updateHero', { heroDetails: this.hero });
},
adminBlockUser () {
if (window.confirm('Ban user and auto-hide all posts?')) {
this.hero.auth.blocked = true;
this.$store.dispatch('hall:updateHero', { heroDetails: this.hero });
}
this.hero.auth.blocked = true;
this.$store.dispatch('hall:updateHero', { heroDetails: this.hero });
},
adminUnblockUser () {
this.hero.auth.blocked = false;
@@ -5,7 +5,6 @@
:hide-footer="true"
:hide-header="true"
@hide="beforeHide"
@hidden="onHidden"
@shown="onShown()"
>
<profile
@@ -55,14 +54,11 @@ export default {
},
beforeHide () {
if (this.$route.path !== window.location.pathname) {
this.$root.$emit('habitica:restoreTitle');
}
},
onHidden () {
if (this.$route.path !== window.location.pathname) {
this.$router.go(-1);
this.$router.back();
}
},
},
};
</script>
+7
View File
@@ -0,0 +1,7 @@
import axios from 'axios';
export async function getFAQ () {
const url = '/api/v4/faq?platform=web';
const response = await axios.get(url);
return response.data.data;
}
@@ -18,6 +18,7 @@ import * as snackbars from './snackbars';
import * as worldState from './worldState';
import * as news from './news';
import * as analytics from './analytics';
import * as faq from './faq';
// Actions should be named as 'actionName' and can be accessed as 'namespace:actionName'
// Example: fetch in user.js -> 'user:fetch'
@@ -41,6 +42,7 @@ const actions = flattenAndNamespace({
worldState,
news,
analytics,
faq,
});
export default actions;
+6 -6
View File
@@ -1,13 +1,13 @@
import axios from 'axios';
export async function getTags () {
const url = 'api/v4/tags';
const url = '/api/v4/tags';
const response = await axios.get(url);
return response.data.data;
}
export async function createTag (store, payload) {
const url = 'api/v4/tags';
const url = '/api/v4/tags';
const response = await axios.post(url, {
name: payload.name,
});
@@ -19,13 +19,13 @@ export async function createTag (store, payload) {
}
export async function getTag (store, payload) {
const url = `api/v4/tags/${payload.tagId}`;
const url = `/api/v4/tags/${payload.tagId}`;
const response = await axios.get(url);
return response.data.data;
}
export async function updateTag (store, payload) {
const url = `api/v4/tags/${payload.tagId}`;
const url = `/api/v4/tags/${payload.tagId}`;
const response = await axios.put(url, {
tagDetails: payload.tagDetails,
});
@@ -33,7 +33,7 @@ export async function updateTag (store, payload) {
}
export async function sortTag (store, payload) {
const url = 'api/v4/reorder-tags';
const url = '/api/v4/reorder-tags';
const response = await axios.post(url, {
tagId: payload.tagId,
to: payload.to,
@@ -42,7 +42,7 @@ export async function sortTag (store, payload) {
}
export async function deleteTag (store, payload) {
const url = `api/v4/tags/${payload.tagId}`;
const url = `/api/v4/tags/${payload.tagId}`;
const response = await axios.delete(url);
return response.data.data;
}
+6 -1
View File
@@ -740,5 +740,10 @@
"backgroundAmongGiantMushroomsNotes": "Bewundere Riesige Pilze.",
"backgroundAmongGiantMushroomsText": "Unter Riesigen Pilzen",
"backgroundMistyAutumnForestText": "Nebeliger Herbstwald",
"backgroundMistyAutumnForestNotes": "Durchstreife einen nebeligen Herbstwald."
"backgroundMistyAutumnForestNotes": "Durchstreife einen nebeligen Herbstwald.",
"backgroundAutumnBridgeText": "Brücke im Herbst",
"backgroundAutumnBridgeNotes": "Bewundere die Schönheit einer Brücke im Herbst.",
"backgrounds122022": "Set 103: Veröffentlicht im Dezember 2022",
"backgroundBranchesOfAHolidayTreeText": "Äste eines Festtagsbaums",
"backgroundBranchesOfAHolidayTreeNotes": "Baumle auf den Ästen eines Festtagsbaums."
}
+4 -1
View File
@@ -141,5 +141,8 @@
"achievementWoodlandWizardModalText": "You collected all the forest pets!",
"achievementBoneToPick": "Bone to Pick",
"achievementBoneToPickText": "Has hatched all the Classic and Quest Skeleton Pets!",
"achievementBoneToPickModalText": "You collected all the Classic and Quest Skeleton Pets!"
"achievementBoneToPickModalText": "You collected all the Classic and Quest Skeleton Pets!",
"achievementPolarPro": "Polar Pro",
"achievementPolarProText": "Has hatched all Polar pets: Bear, Fox, Penguin, Whale, and Wolf!",
"achievementPolarProModalText": "You collected all the Polar Pets!"
}
+2
View File
@@ -67,6 +67,8 @@
"webFaqAnswer12": "World Bosses are special monsters that appear in the Tavern. All active users are automatically battling the Boss, and their tasks and Skills will damage the Boss as usual. You can also be in a normal Quest at the same time. Your tasks and Skills will count towards both the World Boss and the Boss/Collection Quest in your party. A World Boss will never hurt you or your account in any way. Instead, it has a Rage Bar that fills when users skip Dailies. If its Rage bar fills, it will attack one of the Non-Player Characters around the site and their image will change. You can read more about [past World Bosses](https://habitica.fandom.com/wiki/World_Bosses) on the wiki.",
"faqQuestion13": "What is a Group Plan?",
"iosFaqAnswer13": "## How do Group Plans work?\n\nA [Group Plan](/group-plans) gives your Party or Guild access to a shared task board thats similar to your personal task board! Its a shared Habitica experience where tasks can be created and checked off by anyone in the group.\n\nThere are also features available like member roles, status view, and task assigning that give you a more controlled experience. [Visit our wiki](https://habitica.fandom.com/wiki/Group_Plans) to learn more about our Group Plans features!\n\n## Who benefits from a Group Plan?\n\nGroup Plans work best when you have a small team of people who want to collaborate together. We recommend 2-5 members.\n\nGroup Plans are great for families, whether its a parent and child or you and a partner. Shared goals, chores, or responsibilities are easy to keep track of on one board.\n\nGroup Plans can also be useful for teams of colleagues that have shared goals, or managers that want to introduce their employees to gamification.\n\n## Quick tips for using Groups\n\nHere are some quick tips to get you started with your new Group. Well provide more details in the following sections:\n\n* Make a member a manager to give them the ability to create and edit tasks\n* Leave tasks unassigned if anyone can complete it and it only needs done once\n* Assign a task to one person to make sure no one else can complete their task\n* Assign a task to multiple people if they all need to complete it\n* Toggle the ability to display shared tasks on your personal board to not miss anything\n* You get rewarded for the tasks you complete, even multi-assigned\n* Task completion rewards arent shared or split between Team members\n* Use task color on the team board to judge the average completion rate of tasks\n* Regularly review the tasks on your Team Board to make sure they are still relevant\n* Missing a Daily wont damage you or your team, but the task will degrade in color\n\n## How can others in the group create tasks?\n\nOnly the group leader and managers can create tasks. If youd like a group member to be able to create tasks, then you should promote them to be a manager by going to the Group Information tab, viewing the member list, and clicking the dot icon by their name.\n\n## How does assigning a task work?\n\nGroup Plans give you the unique ability to assign tasks to other group members. Assigning a task is great for delegating. If you assign a task to someone, then other members are prevented from completing it.\n\nYou can also assign a task to multiple people if it needs to be completed by more than one member. For example, if everyone has to brush their teeth, create a task and assign it to each group member. They will all be able to check it off and get their individual rewards for doing so. The main task will show as complete once everyone checks it off.\n\n## How do unassigned tasks work?\n\nUnassigned tasks can be completed by anyone in the group, so leave a task unassigned to allow any member to complete it. For example, taking out the trash. Whoever takes out the trash can check off the unassigned task and it will show as completed for everyone.\n\n## How does the synchronized day reset work?\n\nShared tasks will reset at the same time for everyone to keep the shared task board in sync. This time is visible on the shared task board and is determined by the group leaders day start time. Because shared tasks reset automatically, you will not get a chance to complete yesterdays uncompleted shared Dailies when you check in the next morning.\n\nShared Dailies will not do damage if they are missed, however they will degrade in color to help visualize progress. We dont want the shared experience to be a negative one!\n\n## How do I use my Group on the mobile apps?\n\nWhile the mobile apps dont fully support all Group Plans functionality yet, you can still complete shared tasks from the iOS and Android app by copying the tasks onto your personal task board. You can switch this preference on from Settings in the mobile apps or from the group task board on the browser version. Now open and assigned shared tasks will display on your personal task board across all platforms.\n\n## Whats the difference between a Groups shared tasks and Challenges?\n\nGroup Plan shared task boards are more dynamic than Challenges, in that they can constantly be updated and interacted with. Challenges are great if you have one set of tasks to send out to many people.\n\nGroup Plans are also a paid feature, while Challenges are available free to everyone.\n\nYou cannot assign specific tasks in Challenges, and Challenges do not have a shared day reset. In general, Challenges offer less control and direct interaction.",
"androidFaqAnswer13": "## How do Group Plans work?\n\nA [Group Plan](/group-plans) gives your Party or Guild access to a shared task board thats similar to your personal task board! Its a shared Habitica experience where tasks can be created and checked off by anyone in the group.\n\nThere are also features available like member roles, status view, and task assigning that give you a more controlled experience. [Visit our wiki](https://habitica.fandom.com/wiki/Group_Plans) to learn more about our Group Plans features!\n\n## Who benefits from a Group Plan?\n\nGroup Plans work best when you have a small team of people who want to collaborate together. We recommend 2-5 members.\n\nGroup Plans are great for families, whether its a parent and child or you and a partner. Shared goals, chores, or responsibilities are easy to keep track of on one board.\n\nGroup Plans can also be useful for teams of colleagues that have shared goals, or managers that want to introduce their employees to gamification.\n\n## Quick tips for using Groups\n\nHere are some quick tips to get you started with your new Group. Well provide more details in the following sections:\n\n* Make a member a manager to give them the ability to create and edit tasks\n* Leave tasks unassigned if anyone can complete it and it only needs done once\n* Assign a task to one person to make sure no one else can complete their task\n* Assign a task to multiple people if they all need to complete it\n* Toggle the ability to display shared tasks on your personal board to not miss anything\n* You get rewarded for the tasks you complete, even multi-assigned\n* Task completion rewards arent shared or split between Team members\n* Use task color on the team board to judge the average completion rate of tasks\n* Regularly review the tasks on your Team Board to make sure they are still relevant\n* Missing a Daily wont damage you or your team, but the task will degrade in color\n\n## How can others in the group create tasks?\n\nOnly the group leader and managers can create tasks. If youd like a group member to be able to create tasks, then you should promote them to be a manager by going to the Group Information tab, viewing the member list, and clicking the dot icon by their name.\n\n## How does assigning a task work?\n\nGroup Plans give you the unique ability to assign tasks to other group members. Assigning a task is great for delegating. If you assign a task to someone, then other members are prevented from completing it.\n\nYou can also assign a task to multiple people if it needs to be completed by more than one member. For example, if everyone has to brush their teeth, create a task and assign it to each group member. They will all be able to check it off and get their individual rewards for doing so. The main task will show as complete once everyone checks it off.\n\n## How do unassigned tasks work?\n\nUnassigned tasks can be completed by anyone in the group, so leave a task unassigned to allow any member to complete it. For example, taking out the trash. Whoever takes out the trash can check off the unassigned task and it will show as completed for everyone.\n\n## How does the synchronized day reset work?\n\nShared tasks will reset at the same time for everyone to keep the shared task board in sync. This time is visible on the shared task board and is determined by the group leaders day start time. Because shared tasks reset automatically, you will not get a chance to complete yesterdays uncompleted shared Dailies when you check in the next morning.\n\nShared Dailies will not do damage if they are missed, however they will degrade in color to help visualize progress. We dont want the shared experience to be a negative one!\n\n## How do I use my Group on the mobile apps?\n\nWhile the mobile apps dont fully support all Group Plans functionality yet, you can still complete shared tasks from the iOS and Android app by copying the tasks onto your personal task board. You can switch this preference on from Settings in the mobile apps or from the group task board on the browser version. Now open and assigned shared tasks will display on your personal task board across all platforms.\n\n## Whats the difference between a Groups shared tasks and Challenges?\n\nGroup Plan shared task boards are more dynamic than Challenges, in that they can constantly be updated and interacted with. Challenges are great if you have one set of tasks to send out to many people.\n\nGroup Plans are also a paid feature, while Challenges are available free to everyone.\n\nYou cannot assign specific tasks in Challenges, and Challenges do not have a shared day reset. In general, Challenges offer less control and direct interaction.",
"webFaqAnswer13": "## How do Group Plans work?\n\nA [Group Plan](/group-plans) gives your Party or Guild access to a shared task board thats similar to your personal task board! Its a shared Habitica experience where tasks can be created and checked off by anyone in the group.\n\nThere are also features available like member roles, status view, and task assigning that give you a more controlled experience. [Visit our wiki](https://habitica.fandom.com/wiki/Group_Plans) to learn more about our Group Plans features!\n\n## Who benefits from a Group Plan?\n\nGroup Plans work best when you have a small team of people who want to collaborate together. We recommend 2-5 members.\n\nGroup Plans are great for families, whether its a parent and child or you and a partner. Shared goals, chores, or responsibilities are easy to keep track of on one board.\n\nGroup Plans can also be useful for teams of colleagues that have shared goals, or managers that want to introduce their employees to gamification.\n\n## Quick tips for using Groups\n\nHere are some quick tips to get you started with your new Group. Well provide more details in the following sections:\n\n* Make a member a manager to give them the ability to create and edit tasks\n* Leave tasks unassigned if anyone can complete it and it only needs done once\n* Assign a task to one person to make sure no one else can complete their task\n* Assign a task to multiple people if they all need to complete it\n* Toggle the ability to display shared tasks on your personal board to not miss anything\n* You get rewarded for the tasks you complete, even multi-assigned\n* Task completion rewards arent shared or split between Team members\n* Use task color on the team board to judge the average completion rate of tasks\n* Regularly review the tasks on your Team Board to make sure they are still relevant\n* Missing a Daily wont damage you or your team, but the task will degrade in color\n\n## How can others in the group create tasks?\n\nOnly the group leader and managers can create tasks. If youd like a group member to be able to create tasks, then you should promote them to be a manager by going to the Group Information tab, viewing the member list, and clicking the dot icon by their name.\n\n## How does assigning a task work?\n\nGroup Plans give you the unique ability to assign tasks to other group members. Assigning a task is great for delegating. If you assign a task to someone, then other members are prevented from completing it.\n\nYou can also assign a task to multiple people if it needs to be completed by more than one member. For example, if everyone has to brush their teeth, create a task and assign it to each group member. They will all be able to check it off and get their individual rewards for doing so. The main task will show as complete once everyone checks it off.\n\n## How do unassigned tasks work?\n\nUnassigned tasks can be completed by anyone in the group, so leave a task unassigned to allow any member to complete it. For example, taking out the trash. Whoever takes out the trash can check off the unassigned task and it will show as completed for everyone.\n\n## How does the synchronized day reset work?\n\nShared tasks will reset at the same time for everyone to keep the shared task board in sync. This time is visible on the shared task board and is determined by the group leaders day start time. Because shared tasks reset automatically, you will not get a chance to complete yesterdays uncompleted shared Dailies when you check in the next morning.\n\nShared Dailies will not do damage if they are missed, however they will degrade in color to help visualize progress. We dont want the shared experience to be a negative one!\n\n## How do I use my Group on the mobile apps?\n\nWhile the mobile apps dont fully support all Group Plans functionality yet, you can still complete shared tasks from the iOS and Android app by copying the tasks onto your personal task board. You can switch this preference on from Settings in the mobile apps or from the group task board on the browser version. Now open and assigned shared tasks will display on your personal task board across all platforms.\n\n## Whats the difference between a Groups shared tasks and Challenges?\n\nGroup Plan shared task boards are more dynamic than Challenges, in that they can constantly be updated and interacted with. Challenges are great if you have one set of tasks to send out to many people.\n\nGroup Plans are also a paid feature, while Challenges are available free to everyone.\n\nYou cannot assign specific tasks in Challenges, and Challenges do not have a shared day reset. In general, Challenges offer less control and direct interaction.",
"iosFaqStillNeedHelp": "If you have a question that isn't on this list or on the [Wiki FAQ](https://habitica.fandom.com/wiki/FAQ), come ask in the Tavern chat under Menu > Tavern! We're happy to help.",
+35
View File
@@ -438,6 +438,9 @@
"headSpecialNye2021Text": "Preposterous Party Hat",
"headSpecialNye2021Notes": "You've received a Preposterous Party Hat! Wear it with pride while ringing in the New Year! Confers no benefit.",
"headSpecialNye2022Text": "Fantastic Party Hat",
"headSpecialNye2022Notes": "You've received a Fantastic Party Hat! Wear it with pride while ringing in the New Year! Confers no benefit.",
"weaponSpecialSpring2022RogueText": "Giant Earring Stud",
"weaponSpecialSpring2022RogueNotes": "A shiny! Its so shiny and gleaming and pretty and nice and all yours! Increases Strength by <%= str %>. Limited Edition 2022 Spring Gear.",
"weaponSpecialSpring2022WarriorText": "Inside-Out Umbrella",
@@ -456,6 +459,15 @@
"weaponSpecialFall2022HealerText": "Right Peeker Eye",
"weaponSpecialFall2022HealerNotes": "To claim victory, hold it forth and utter the words of command: 'Eye One!' Increases Intelligence by <%= int %>. Limited Edition 2022 Fall Gear.",
"weaponSpecialWinter2023RogueText": "Green Satin Sash",
"weaponSpecialWinter2023RogueNotes": "Legends tell of Rogues who snare their opponents' weapons, disarm them, then gift the item back just to be cute. Incrases Strength by <%= str %>. Limited Edition 2022-2023 Winter Gear.",
"weaponSpecialWinter2023WarriorText": "Tusk Spear",
"weaponSpecialWinter2023WarriorNotes": "The two prongs of this spear are shaped like walrus tusks but are twice as powerful. Jab at doubts and at silly poems until they back off! Increases Strength by <%= str %>. Limited Edition 2022-2023 Winter Gear.",
"weaponSpecialWinter2023MageText": "Foxfire",
"weaponSpecialWinter2023MageNotes": "Neither fox nor fire, but plenty festive! Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2022-2023 Winter Gear.",
"weaponSpecialWinter2023HealerText": "Throwing Wreath",
"weaponSpecialWinter2023HealerNotes": "Watch this festive, prickly wreath spin through the air toward your enemy or obstacles and return to you like a boomerang for another throw. Increases Intelligence by <%= int %>. Limited Edition 2022-2023 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",
@@ -1109,6 +1121,15 @@
"armorSpecialFall2022HealerText": "Profusion of Peeker Pods",
"armorSpecialFall2022HealerNotes": "How many peeps could a Peeker peep, if a Peeker could peep peeps? Increases Constitution by <%= con %>. Limited Edition 2022 Fall Gear.",
"armorSpecialWinter2023RogueText": "Ribbon Wrap",
"armorSpecialWinter2023RogueNotes": "Obtain items. Bundle them up in pretty paper. And give them to your local Rogue! The season demands it. Increases Perception by <%= per %>. Limited Edition 2022-2023 Winter Gear.",
"armorSpecialWinter2023WarriorText": "Walrus Suit",
"armorSpecialWinter2023WarriorNotes": "This tough walrus suit is perfect for a walk along a beach in the middle of the night. Increases Constitution by <%= con %>. Limited Edition 2022-2023 Winter Gear.",
"armorSpecialWinter2023MageText": "Fairy Light Gown",
"armorSpecialWinter2023MageNotes": "Just because you have lights on, that doesn't make you a tree! ...maybe some other year. Increases Intelligence by <%= int %>. Limited Edition 2022-2023 Winter Gear.",
"armorSpecialWinter2023HealerText": "Cardinal Suit",
"armorSpecialWinter2023HealerNotes": "This bright cardinal suit is perfect for flying high above your problems. Increases Constitution by <%= con %>. Limited Edition 2022-2023 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",
@@ -1835,6 +1856,15 @@
"headSpecialFall2022MageNotes": "Entrance and lure others close with this magical maiden mask. Increases Perception by <%= per %>. Limited Edition 2022 Fall Gear.",
"headSpecialFall2022HealerText": "Peeker Mask",
"headSpecialFall2022HealerNotes": "Beauty is in there. Somewhere! Increases Intelligence by <%= int %>. Limited Edition 2022 Fall Gear.",
"headSpecialWinter2023RogueText": "Gift Bow",
"headSpecialWinter2023RogueNotes": "People's temptations to “unwrap” your hair will give you opportunities to practice your ducks and dodges. Increases Perception by <%= per %>. Limited Edition 2022-2023 Winter Gear.",
"headSpecialWinter2023WarriorText": "Walrus Helm",
"headSpecialWinter2023WarriorNotes": "This walrus helm is perfect for chatting with a friend or partaking in a clever meal. Increases Strength by <%= str %>. Limited Edition 2022-2023 Winter Gear.",
"headSpecialWinter2023MageText": "Fairy-Lit Tiara",
"headSpecialWinter2023MageNotes": "Were you hatched with a Starry Night potion? Because I've got stars in my eyes for you. Increases Perception by <%= per %>. Limited Edition 2022-2023 Winter Gear.",
"headSpecialWinter2023HealerText": "Cardinal Helm",
"headSpecialWinter2023HealerNotes": "This cardinal helm is perfect for whistling and singing to herald the winter season. Increases Intelligence by <%= int %>. Limited Edition 2022-2023 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.",
@@ -2396,6 +2426,11 @@
"shieldSpecialFall2022HealerText": "Left Peeker Eye",
"shieldSpecialFall2022HealerNotes": "Eye Two, look upon this costume and tremble. Increases Constitution by <%= con %>. Limited Edition 2022 Fall Gear.",
"shieldSpecialWinter2023WarriorText": "Oyster Shield",
"shieldSpecialWinter2023WarriorNotes": "The time has come, the Walrus said, to talk of many things: of oyster shells—and winter bells—of songs that someone sings—and where this shields pearl has gone—or what the new year brings! Increases Constitution by <%= con %>. Limited Edition 2022-2023 Winter Gear.",
"shieldSpecialWinter2023HealerText": "Cool Jams",
"shieldSpecialWinter2023HealerNotes": "Your song of frost and snow will soothe the spirits of all who hear. Increases Constitution by <%= con %>. Limited Edition 2022-2023 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",
+5 -1
View File
@@ -191,6 +191,10 @@
"fall2022OrcWarriorSet": "Orc (Warrior)",
"fall2022HarpyMageSet": "Harpy (Mage)",
"fall2022WatcherHealerSet": "Peeker (Healer)",
"winter2023WalrusWarriorSet": "Walrus (Warrior)",
"winter2023FairyLightsMageSet": "Fairy Lights (Mage)",
"winter2023CardinalHealerSet": "Cardinal (Healer)",
"winter2023RibbonRogueSet": "Ribbon (Rogue)",
"eventAvailability": "Available for purchase until <%= date(locale) %>.",
"eventAvailabilityReturning": "Available for purchase until <%= availableDate(locale) %>. This potion was last available in <%= previousDate(locale) %>.",
"dateEndJanuary": "January 31",
@@ -229,7 +233,7 @@
"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 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.",
"g1g1Limitations": "This is a limited time event that starts on December 15th at 8:00 AM ET (13:00 UTC) and will end January 8th at 11:59 PM ET (January 9th 04:59 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.",
"gemSaleHow": "Between <%= eventStartMonth %> <%= eventStartOrdinal %> and <%= eventEndOrdinal %>, simply purchase any Gem bundle like usual and your account will be credited with the promotional amount of Gems. More Gems to spend, share, or save for any future releases!",
"gemSaleLimitations": "This promotion only applies during the limited time event. This event starts on <%= eventStartMonth %> <%= eventStartOrdinal %> at 8:00 AM EDT (12:00 UTC) and will end <%= eventStartMonth %> <%= eventEndOrdinal %> at 8:00 PM EDT (00:00 UTC). The promo offer is only available when buying Gems for yourself."
+14 -14
View File
@@ -1417,21 +1417,21 @@
"shieldSpecialSpring2018WarriorText": "Escudo de la Mañana",
"shieldSpecialSpring2018WarriorNotes": "Este robusto escudo brilla con la gloria de la primera luz. Aumenta la Constitución en <%= con %>. Equipamiento de edición limitada de primavera 2018.",
"shieldSpecialSpring2018HealerText": "Escudo Granate",
"shieldSpecialSpring2018HealerNotes": "A pesar de su apariencia caprichosa, ¡este escudo granate es bastante duradero! Aumenta la Constitución en <%= con %>. Equipamiento de Primavera Edición Limitada del 2018.",
"shieldSpecialSummer2018WarriorText": "Escudo de cráneo beta",
"shieldSpecialSummer2018WarriorNotes": "Hecho de piedra, este temible escudo con forma de calavera inflige terror a los peces enemigos mientras reúnes a tus mascotas esqueleto y monturas. Aumenta la Constitución en <%= con %>. Equipo de Verano Edición Limitada del 2018.",
"shieldSpecialSummer2018HealerText": "Emblema de monarca sirena",
"shieldSpecialSummer2018HealerNotes": "Este escudo puede producir una cúpula de aire para el beneficio de los visitantes terrestres al visitar tu reino acuático. Aumenta la Constitución en <%= con %>. Equipo de Verano Edición Limitada del 2018.",
"shieldSpecialSpring2018HealerNotes": "A pesar de su apariencia caprichosa, ¡este escudo granate es bastante duradero! Aumenta la Constitución en <%= con %>. Equipamiento de edición limitada de primavera 2018.",
"shieldSpecialSummer2018WarriorText": "Escudo de Cráneo Beta",
"shieldSpecialSummer2018WarriorNotes": "Hecho de piedra, este temible escudo con forma de calavera inflige terror a los peces enemigos mientras reúnes a tus mascotas esqueleto y monturas. Aumenta la Constitución en <%= con %>. Equipamiento de edición limitada de verano 2018.",
"shieldSpecialSummer2018HealerText": "Emblema de Monarca Sirena",
"shieldSpecialSummer2018HealerNotes": "Este escudo puede producir una cúpula de aire para el beneficio de los visitantes terrestres al visitar tu reino acuático. Aumenta la Constitución en <%= con %>. Equipamiento de edición limitada de verano 2018.",
"shieldSpecialFall2018RogueText": "Vial de la Tentación",
"shieldSpecialFall2018RogueNotes": "Este frasco representa todas las distracciones y problemas que te impiden dar lo mejor de ti. ¡Resiste! ¡Te estamos apoyando! Aumenta la Fuerza en <%= str %>. Edición Limitada de Equipamiento de Otoño 2018.",
"shieldSpecialFall2018RogueNotes": "Este frasco representa todas las distracciones y problemas que te impiden dar lo mejor de ti. ¡Resiste! ¡Te estamos apoyando! Aumenta la Fuerza en <%= str %>. Equipamiento de edición limitada de otoño 2018.",
"shieldSpecialFall2018WarriorText": "Escudo Brillante",
"shieldSpecialFall2018WarriorNotes": "Super brillante para disuadir a cualquier gorgona problemática de asomarse por las esquinas. Aumenta la Constitución en <%= con %>. Edición Limitada de Equipamiento de Otoño 2018.",
"shieldSpecialFall2018WarriorNotes": "Super brillante para disuadir a cualquier gorgona problemática de asomarse por las esquinas. Aumenta la Constitución en <%= con %>. Equipamiento de edición limitada de otoño 2018.",
"shieldSpecialFall2018HealerText": "Escudo Hambriento",
"shieldSpecialFall2018HealerNotes": "Con sus fauces bien abiertas, este escudo absorberá todos los golpes de tu enemigo. Aumenta la Constitución en <%= con %>. Edición Limitada de Equipamiento de Otoño 2018.",
"shieldSpecialFall2018HealerNotes": "Con sus fauces bien abiertas, este escudo absorberá todos los golpes de tu enemigo. Aumenta la Constitución en <%= con %>. Equipamiento de edición limitada de otoño 2018.",
"shieldSpecialWinter2019WarriorText": "Escudo Helado",
"shieldSpecialWinter2019WarriorNotes": "Este escudo fue fabricado usando las más gruesas capas de hielo del glaciar más antiguo de las Estepas de Stoïkalm. Aumenta la Constitución en <%= con %>. Equipamiento de Invierno Edición Limitada de 2018-2019.",
"shieldSpecialWinter2019WarriorNotes": "Este escudo fue fabricado usando las más gruesas capas de hielo del glaciar más antiguo de las Estepas de Stoïkalm. Aumenta la Constitución en <%= con %>. Equipamiento de edición limitada de invierno 2018-2019.",
"shieldSpecialWinter2019HealerText": "Cristales de Hielo Encantados",
"shieldSpecialWinter2019HealerNotes": "Puede que el fino hielo se rompa, pero estos perfectos cristales devolverán cualquier golpe antes de que impacte. Aumenta la Constitución en <%= con %>. Equipamiento de Invierno Edición Limitada de 2018-2019.",
"shieldSpecialWinter2019HealerNotes": "Puede que el fino hielo se rompa, pero estos perfectos cristales devolverán cualquier golpe antes de que impacte. Aumenta la Constitución en <%= con %>. Equipamiento de edición limitada de invierno 2018-2019.",
"shieldMystery201601Text": "Destructora de Resoluciones",
"shieldMystery201601Notes": "Esta espada se puede usar para desviar a todas las distracciones. No otorga ningún beneficio. Artículo de Suscriptor de Enero 2016.",
"shieldMystery201701Text": "Escudo para congelar el tiempo",
@@ -2289,16 +2289,16 @@
"headArmoireGuardiansBonnetNotes": "¡Ponte este atractivo gorro para pastorear tus tareas! Aumenta la constitución en <%= con %>. Armario Encantado: Conjunto de guardián de los pastores (artículo 1 de 3).",
"headArmoireHeraldsCapNotes": "Este gorro de heraldo incluye una alegre pluma. Aumenta la inteligencia en <%= int %>. Armario Encantado: Conjunto de heraldo (articulo 2 de 4).",
"headArmoireMedievalLaundryHatNotes": "No es que sea un gorro muy elaborado, pero para lavar la ropa... servirá. Aumenta la inteligencia en <%= int %>. Armario Encantado: Conjunto de lavanderos medievales (artículo 4 de 6).",
"shieldSpecialSummer2019HealerNotes": "Deje que aquellos que necesitan ayuda sepan que está en camino, gracias al sonoro estruendo de esta trompeta de concha. Aumenta la constitución en <%= con %>. Equipamiento de edición limitada de verano 2019.",
"shieldSpecialSummer2019HealerNotes": "Deje que aquellos que necesitan ayuda sepan que está en camino, gracias al sonoro estruendo de esta trompeta de concha. Aumenta la Constitución en <%= con %>. Equipamiento de edición limitada de verano 2019.",
"headArmoireJadeHelmText": "Caso de jade",
"headArmoirePinkFloppyHatNotes": "Se han cosido muchos hechizos en este simple sombrero, dándole un color rosa perfecto. Aumenta la inteligencia en <%= int %>. Armario Encantado: Conjunto casual rosa (artículo 1 de 3).",
"headArmoireHornsOfAutumnNotes": "¡Desenvaina el poder del aire fresco de esta temporada y canalízalo a través de tu magia! Aumenta la fuerza en <%= str %>. Armario Encantado: Conjunto de hechicero otoñal (artículo 1 de 4).",
"headArmoireNightcapText": "Gorro de dormir",
"shieldSpecialSpring2019WarriorNotes": "¡Deja que el poder de la clorofila mantenga a raya a tus enemigos! Aumenta la constitución en <%= con %>. Equipamiento de edición limitada de primavera 2019.",
"shieldSpecialSpring2019WarriorNotes": "¡Deja que el poder de la clorofila mantenga a raya a tus enemigos! Aumenta la Constitución en <%= con %>. Equipamiento de edición limitada de primavera 2019.",
"headArmoireBlueMoonHelmText": "Yelmo de la luna azul",
"headArmoireMedievalLaundryHatText": "Gorro de lavandero",
"shieldSpecialSpring2019HealerNotes": "Este escudo brillante en realidad está hecho de chocolate recubierto de caramelo. Aumenta la constitución en <%= con %>. Equipamiento de edición limitada de primavera 2019.",
"shieldSpecialSummer2019WarriorNotes": "Refúgiate tras este robusto escudo redondo, que lleva grabado como blasón a tu reptil favorito. Aumenta la constitución en <%= con %>. Equipamiento de edición limitada de verano 2019.",
"shieldSpecialSpring2019HealerNotes": "Este escudo brillante en realidad está hecho de chocolate recubierto de caramelo. Aumenta la Constitución en <%= con %>. Equipamiento de edición limitada de primavera 2019.",
"shieldSpecialSummer2019WarriorNotes": "Refúgiate tras este robusto escudo redondo, que lleva grabado como blasón a tu reptil favorito. Aumenta la Constitución en <%= con %>. Equipamiento de edición limitada de verano 2019.",
"headArmoireMedievalLaundryCapText": "Gorro de lavandero",
"headArmoireGuardiansBonnetText": "Gorrito de guardián",
"headArmoireRubberDuckyNotes": "¡El compañero perfecto para un indulgente día de spa! Aunque sorprendentemente, también sabe mucho sobre todo tipo de problemas de software. Aumenta la inteligencia en <%= int %>. Armario Encantado: Conjunto de baño de burbujas (artículo 1 de 4).",
+4 -1
View File
@@ -138,5 +138,8 @@
"achievementGroupsBeta2022Text": "Vous et votre groupe avez fourni un retour de grande valeur pour aider aux tests d'Habitica.",
"achievementWoodlandWizardModalText": "Vous avez collecté tous les familiers de la forêt !",
"achievementWoodlandWizard": "Sorcellerie de sous-bois",
"achievementWoodlandWizardText": "A fait éclore toutes les créatures de la forêt de couleur basique : Blaireau, ours, cerf, renard, grenouille, hérisson, hiboux, escargot, écureuil et arbrisseau !"
"achievementWoodlandWizardText": "A fait éclore toutes les créatures de la forêt de couleur basique : Blaireau, ours, cerf, renard, grenouille, hérisson, hiboux, escargot, écureuil et arbrisseau !",
"achievementBoneToPick": "Un os à ronger",
"achievementBoneToPickText": "A fait éclore tous les familiers squelettes classiques et de quête !",
"achievementBoneToPickModalText": "Vous avez collecté tous les familiers squelette classiques et de quête !"
}
+22 -1
View File
@@ -728,5 +728,26 @@
"backgroundAutumnPicnicText": "Pique-nique automnal",
"backgroundOldPhotoText": "Vieille photo",
"backgroundAutumnPicnicNotes": "Appréciez un pique-nique automnal.",
"backgroundOldPhotoNotes": "Prenez la pose sur une vieille photo."
"backgroundOldPhotoNotes": "Prenez la pose sur une vieille photo.",
"backgrounds112022": "Ensemble 102 : sorti en novembre 2022",
"backgroundAmongGiantMushroomsNotes": "Émerveillez-vous parmi les champignons géants.",
"backgroundAmongGiantMushroomsText": "Parmi les champignons géants",
"backgroundMistyAutumnForestText": "Forêt automnale brumeuse",
"backgroundMistyAutumnForestNotes": "Baladez-vous dans une forêt automnale brumeuse.",
"backgroundAutumnBridgeText": "Pont en automne",
"backgroundAutumnBridgeNotes": "Admirez la beauté d'un pont en automne.",
"backgrounds102022": "Ensemble 101 : sorti en octobre 2022",
"backgroundSpookyRuinsText": "Ruines terrifiantes",
"backgroundSpookyRuinsNotes": "Explorez des ruines terrifiantes.",
"backgroundMaskMakersWorkshopText": "Atelier de fabrication de masques",
"backgroundMaskMakersWorkshopNotes": "Essayez un nouveau visage dans l'atelier de fabrication de masques.",
"backgroundCemeteryGateText": "Porte de cimetière",
"backgroundCemeteryGateNotes": "Hantez la porte d'un cimetière.",
"backgrounds122022": "Ensemble 103 : sorti en décembre 2022",
"backgroundBranchesOfAHolidayTreeText": "Branches d'un sapin de Noël",
"backgroundBranchesOfAHolidayTreeNotes": "Batifoles sur les branches d'un sapin de Noël.",
"backgroundInsideACrystalText": "L'intérieur d'un cristal",
"backgroundInsideACrystalNotes": "Surveillez depuis l'intérieur d'un cristal.",
"backgroundSnowyVillageText": "Village enneigé",
"backgroundSnowyVillageNotes": "Admirez un village enneigé."
}
+51 -1
View File
@@ -2704,5 +2704,55 @@
"weaponSpecialFall2022RogueNotes": "Non seulement vous pouvez vous défendre avec ce concombre, mais il servira aussi de casse-croûte savoureux. Augmente la force de <%= str %>. Équipement en édition limitée de l'automne 2022.",
"weaponSpecialFall2022WarriorNotes": "Elle est peut-être plus prévue pour couper les bûches Ou les tranches de pain croustillant que les armures ennemies, mais GRRR ! Ça a l'air terrifiant ! Augmente la force de <%= str %>. Équipement en édition limitée de l'automne 2022.",
"armorSpecialFall2022RogueNotes": "Que vous nagiez, que vous vous faufiliez, ou que vous luttiez, vous serez tranquille dans cette armure. Augmente la perception de <%= per %>. Équipement en édition limitée de l'automne 2022.",
"weaponSpecialFall2022RogueText": "Lame concombre"
"weaponSpecialFall2022RogueText": "Lame concombre",
"weaponMystery202211Text": "Bâton d'électromancie",
"weaponArmoireMagicSpatulaText": "Spatule magique",
"weaponArmoireFinelyCutGemNotes": "Quelle trouvaille ! Ce bijou étonnant, taillé avec précision, sera le joyau de votre collection. Et il pourrait contenir une magie spéciale, qui n'attend que vous pour l'exploiter. Augmente la constitution de <%= con %>. Armoire enchantée : Ensemble de bijouterie (objet 4 de 4).",
"armorArmoireSheetGhostCostumeText": "Costume de fantôme",
"weaponArmoireMagicSpatulaNotes": "Regardez votre nourriture voler et se retourner dans les airs. Vous aurez de la chance pour la journée si, comme par magie, elle se retourne trois fois avant de retomber sur votre spatule. Augmente la perception de <%= per %>. Armoire enchantée : ensemble d'instruments de cuisine (objet 1 de 2).",
"armorArmoireSheetGhostCostumeNotes": "Bouh ! C'est le costume le plus effrayant de tout Habitica, alors portez-le à bon escient... et faites attention où vous mettez les pieds pour ne pas trébucher. Augmente la constitution de <%= con %>. Armoire enchantée : objet indépendant.",
"armorArmoireJewelersApronNotes": "Ce tablier résistant est exactement ce qu'il faut porter lorsque vous vous sentez créatif. Mieux encore, il comporte des dizaines de petites poches pour ranger tout ce dont vous avez besoin. Augmente l'intelligence de <%= int %>. Armoire enchantée : ensemble de bijouterie (objet 1 de 4).",
"weaponMystery202211Notes": "Exploitez la puissance impressionnante d'une tempête de foudre avec ce bâton. Ne confère aucun bonus. Objet d'abonnement de novembre 2022.",
"armorSpecialFall2022HealerNotes": "Combien d'espions pourrait épier un voyeur, si un voyeur pouvait épier des espions ? Augmente la constitution de <%= con %>. Objet en édition limitée de l'automne 2022.",
"weaponMystery202212Text": "Baguette glaciale",
"weaponMystery202212Notes": "Le flocon de neige lumineux de cette baguette a le pouvoir de réchauffer les cœurs, même lors des nuits d'hiver les plus froides ! Ne confère aucun bonus. Objet d'abonnement de décembre 2022.",
"armorSpecialFall2022WarriorText": "Armure orc",
"armorSpecialFall2022MageText": "Armure de harpie",
"headSpecialFall2022WarriorNotes": "Des défenses assez résistantes et acérées pour percer une citrouille ! GROAR ! Augmente la force de <%= str %>. Objet en édition limitée de l'automne 2022.",
"armorSpecialFall2022MageNotes": "Volez aussi vite que le vent avec ces ailes merveilleuses et serrez ce qui vous tient le plus à cœur dans ces serres terrifiantes. Augmente l'intelligence de <%= int %>. Objet en édition limitée de l'automne 2022.",
"weaponArmoireFinelyCutGemText": "Gemme finement taillée",
"armorSpecialFall2022WarriorNotes": "GROAR ! GRANDES EPAULES vouloir dire vous GRANDE FORCE ! Augmente la constitution de <%= con %>. Objet en édition limitée de l'automne 2022.",
"armorSpecialFall2022HealerText": "Profusion de globes oculaires",
"armorArmoireJewelersApronText": "Tablier de joaillerie",
"armorMystery202210Text": "Armure ophidienne omniprésente",
"armorMystery202210Notes": "Essayez de vous déplacer en rampant pour une fois, vous verrez que c'est un mode de transport très efficace ! Ne confère aucun bonus. Objet d'abonnement d'octobre 2022.",
"headSpecialFall2022RogueNotes": "Avec cette casquette en métal sur la tête, vous aurez une protection supplémentaire lorsque vous vous aventurerez sur la terre ferme. Augmente la perception de <%= per %>. Objet en édition limitée de l'automne 2022.",
"headSpecialFall2022WarriorText": "Masque orc",
"headSpecialFall2022MageText": "Masque de harpie",
"armorMystery202212Text": "Robe glaciale",
"armorMystery202212Notes": "L'univers peut être froid, mais cette charmante robe vous gardera bien au chaud pendant votre vol. Ne confère aucun bonus. Objet d'abonnement de décembre 2022.",
"headSpecialFall2022RogueText": "Masque de kappa",
"headAccessoryMystery202212Text": "Tiare glaciale",
"headAccessoryMystery202212Notes": "Magnifiez votre chaleur et votre amitié à des niveaux insoupçonnés avec cette tiare d'or orné. Ne confère aucun bonus. Objet d'abonnement de décembre 2022.",
"eyewearArmoireComedyMaskText": "Masque de comédie",
"eyewearArmoireComedyMaskNotes": "Joie ! Voici un masque pittoresque pour votre cœur joyeux, jouant, annonçant la joie, et exprimant la gaieté et l'allégresse sur scène. Augmente la constitution de <%= con %>. Armoire enchantée : ensemble de masques de théâtre (objet 1 de 2).",
"eyewearArmoireTragedyMaskText": "Masque de tragédie",
"shieldArmoireBubblingCauldronNotes": "Le chaudron parfait pour préparer une potion de productivité ou cuisiner une soupe savoureuse. En fait, il y a peu de différence entre les deux ! Augmente la constitution de <%= con %>. Armoire enchantée : ensemble d'instruments de cuisine (objet 2 de 2).",
"headMystery202211Notes": "Faites attention avec ce puissant chapeau, son effet sur les admirateurs peut provoquer un choc ! Ne confère aucun bonus. Objet d'abonnement de novembre 2022.",
"headMystery202211Text": "Chapeau d'électromancie",
"shieldArmoireBubblingCauldronText": "Chaudron bouillonnant",
"shieldArmoireJewelersPliersText": "Pince de joaillerie",
"shieldArmoireJewelersPliersNotes": "Elle coupe, elle tord, pince et bien plus. Cet outil peut vous aider à créer quoi que ce soit que vous imaginiez. Augmente la force de <%= str %>. Armoire enchantée : ensemble de bijouterie (objet 3 de 4).",
"headSpecialFall2022MageNotes": "Entrez et attirez les autres près de vous avec ce masque magique de jeune fille. Augmente la perception de <%= per %>. Objet en édition limitée de l'automne 2022.",
"headSpecialFall2022HealerText": "Masque de voyeur",
"headSpecialFall2022HealerNotes": "La beauté est là dedans. Quelque part ! Augmente l'intelligence de <%= int %>. Objet en édition limitée de l'automne 2022.",
"headMystery202210Text": "Heaume ophidien omniprésent",
"headMystery202210Notes": "Ce capuchon écailleux va sûrement terrifier votre liste de choses à faire et la soumettre ! Ne confère aucun bonus. Objet d'abonnement d'octobre 2022.",
"shieldSpecialFall2022WarriorText": "Bouclier orc",
"shieldSpecialFall2022WarriorNotes": "DES BONBONS OU DES GROAR ! Augmente la constitution de <%= con %>. Objet en édition limitée de l'automne 2022.",
"shieldSpecialFall2022HealerText": "Œil gauche du voyeur",
"shieldSpecialFall2022HealerNotes": "Deuxième œil, regardez ce costume et tremblez. Augmente la constitution de <%= con %>. Objet en édition limitée de l'automne 2022.",
"eyewearArmoireJewelersEyeLoupeNotes": "Cette loupe oculaire magnifie ce sur quoi vous travaillez pour que vous puissiez en voir tous les détails. Augmente la perception de <%= per %>. Armoire enchantée : ensemble de bijouterie (objet 2 de 4).",
"eyewearArmoireTragedyMaskNotes": "Hélas ! Voici un lourd masque pour ton pauvre avatar, qui se pavane, s'agite et exprime le malheur et la tristesse sur la scène. Augmente l'intelligence de <%= int %>. Armoire enchantée : ensemble de masques de théâtre (objet 2 de 2).",
"eyewearArmoireJewelersEyeLoupeText": "Loupe oculaire de joaillerie"
}
+15 -3
View File
@@ -20,7 +20,7 @@
"dataTool": "Outil d'affichage des données",
"resources": "Ressources",
"communityGuidelines": "Règles de vie en communauté",
"bannedWordUsed": "Oups ! Il semblerait que ce message contienne une injure, une connotation religieuse, ou une référence à une drogue ou un sujet mature (<%= swearWordsUsed %>). Habitica a des habitants qui proviennent de tous horizons, et nous préservons donc nos fils de discussion. N'hésitez pas à retoucher votre message pour pouvoir l'envoyer !",
"bannedWordUsed": "Oups ! Il semblerait que ce message contienne une injure ou une référence à une drogue ou un sujet mature (<%= swearWordsUsed %>). Habitica préserve les fils de discussion. N'hésitez pas à retoucher votre message pour pouvoir l'envoyer ! Vous devez enlever le mot en question, pas le censurer.",
"bannedSlurUsed": "Votre message contenait du langage inapproprié, et vos privilèges de discussion ont été révoqués.",
"party": "Équipe",
"usernameCopied": "Nom d'utilisateur copié dans le presse-papier.",
@@ -123,7 +123,7 @@
"sendGiftCost": "Total : <%= cost %>$ (USD)",
"sendGiftFromBalance": "Offrir vos propres gemmes",
"sendGiftPurchase": "Acheter les gemmes",
"sendGiftMessagePlaceholder": "Message personnel (facultatif)",
"sendGiftMessagePlaceholder": "Ajouter un message",
"sendGiftSubscription": "<%= months %> Mois : <%= price %>$ USD",
"gemGiftsAreOptional": "Veuillez noter que Habitica ne vous demandera jamais d'offrir des gemmes aux autres joueurs. Supplier qu'on vous donne des gemmes est une <strong>violation de nos règles de vie en communauté</strong>, et toute fois où cela se produit doit être signalée à <%= hrefTechAssistanceEmail %>.",
"battleWithFriends": "Combattez des monstres aux côtés d'amis",
@@ -405,5 +405,17 @@
"newGroupsBullet01": "Interagissez avec les tâches directement depuis la console des tâches partagées",
"groupUse": "Qu'est ce qui décrit mieux l'usage de votre groupe ?*",
"groupUseDefault": "Choisissez une réponse",
"createGroup": "Créer un groupe"
"createGroup": "Créer un groupe",
"groupParentChildren": "Parent(s) qui définissent des tâches pour les enfants",
"descriptionOptionalText": "Ajouter une description",
"nextPaymentMethod": "Suite : Méthode de paiement",
"sendGiftLabel": "Voulez vous envoyer un message avec le cadeau ?",
"groupCouple": "Couple qui partage ses tâches",
"groupFriends": "Amis qui partagent leurs tâches",
"groupCoworkers": "Collaborateurs qui partagent leurs tâches",
"groupManager": "Responsable qui définit des tâches pour ses employés",
"groupTeacher": "Enseignant qui définit des tâches pour les étudiants",
"nameStar": "Nom*",
"nameStarText": "Ajouter un titre",
"descriptionOptional": "Description"
}
+18 -12
View File
@@ -190,24 +190,24 @@
"suggestMyUsername": "Suggérer mon identifiant",
"mentioning": "Mentions",
"bannedWordUsedInProfile": "Votre pseudo ou votre texte de présentation contenait un langage inapproprié.",
"transaction_create_guild": "Créé une guilde",
"transaction_subscription_perks": "De bonus d'abonnement",
"transaction_create_guild": "<b>Créé</b> une guilde",
"transaction_subscription_perks": "Bonus d'<b>abonnement</b>",
"noHourglassTransactions": "Vous n'avez aucune transaction de sablier mystique pour l'instant.",
"transaction_debug": "Action de debug",
"transaction_buy_money": "Acheté avec de l'argent",
"transaction_buy_gold": "Acheté avec de l'or",
"transaction_contribution": "Via une contribution",
"transaction_spend": "Dépensé pour",
"transaction_buy_money": "<b>Acheté</b> avec de l'argent",
"transaction_buy_gold": "<b>Acheté</b> avec de l'or",
"transaction_contribution": "<b>Palier</b> modifié",
"transaction_spend": "<b>Dépensé</b> pour",
"transaction_release_mounts": "Libéré les montures",
"transaction_reroll": "Utilisé une potion de fortification",
"transactions": "Transactions",
"gemTransactions": "Transactions de gemmes",
"hourglassTransactions": "Transactions de sabliers mystiques",
"noGemTransactions": "Vous n'avez aucune transaction de gemmes pour l'instant.",
"transaction_gift_send": "Offert à",
"transaction_gift_receive": "Reçu de",
"transaction_create_challenge": "Créé un défi",
"transaction_change_class": "Changé de classe",
"transaction_gift_send": "<b>Offert</b> à",
"transaction_gift_receive": "<b>Reçu</b> de",
"transaction_create_challenge": "<b>Créé</b> un défi",
"transaction_change_class": "Changé de <b>classe</b>",
"transaction_rebirth": "Utilisé l'orbe de résurrection",
"transaction_release_pets": "Libéré les familiers",
"addPasswordAuth": "Ajouter le mot de passe",
@@ -218,7 +218,13 @@
"adjustment": "Ajustement",
"passwordSuccess": "Mot de passe changé avec succès",
"giftSubscriptionRateText": "<strong>$<%= price %> USD</strong> pour <strong><%= months %> mois</strong>",
"transaction_admin_update_balance": "Administration donnée",
"transaction_admin_update_balance": "<b>Administration</b> donnée",
"transaction_create_bank_challenge": "Banque de défi créée",
"transaction_admin_update_hourglasses": "Admin mis à jour"
"transaction_admin_update_hourglasses": "<b>Admin</b> mis à jour",
"passwordIssueLength": "Les mots de passe doivent faire entre 8 et 64 caractères.",
"timestamp": "Horodatage",
"amount": "Montant",
"action": "Action",
"note": "Note",
"remainingBalance": "Crédit restant"
}
+2 -1
View File
@@ -215,5 +215,6 @@
"mysterySet202208": "Ensemble de queue de cheval audacieuse",
"mysterySet202209": "Ensemble d'étude de magie",
"mysterySet202210": "Ensemble ophidien inquiétant",
"mysterySet202211": "Ensemble d'électromancie"
"mysterySet202211": "Ensemble d'électromancie",
"mysterySet202212": "Ensemble de Garde des glaces"
}
+3 -2
View File
@@ -10,7 +10,7 @@
"viewAchievements": "Lihat Penghargaan",
"letsGetStarted": "Mari kita mulai!",
"onboardingProgress": "<%= percentage %>% kemajuan",
"gettingStartedDesc": "Ayo selesaikan tugas pengenalan ini dan kamu akan mendapat <strong>5 Pencapaian</strong> dan <strong class=\"gold-amount\">100 Emas</strong> setelah kamu selesai!",
"gettingStartedDesc": "Ayo selesaikan tugas pengenalan ini dan kamu akan memperoleh <strong>5 Pencapaian</strong> dan <strong class=\"gold-amount\">100 Emas</strong> setelah kamu selesai!",
"yourProgress": "Perkembangan Anda",
"yourRewards": "Hadiah Anda",
"foundNewItems": "Anda menemukan barang baru!",
@@ -123,5 +123,6 @@
"achievementShadyCustomerModalText": "Kamu mengumpulkan semua Peliharaan Bayangan!",
"achievementShadeOfItAll": "Segala Bayang yang Ada",
"achievementShadeOfItAllText": "Telah menjinakkan semua Tunggangan Bayangan.",
"achievementShadeOfItAllModalText": "Kamu menjinakkan semua Tunggangan Bayangan!"
"achievementShadeOfItAllModalText": "Kamu menjinakkan semua Tunggangan Bayangan!",
"achievementWoodlandWizardModalText": "Kamu telah mengumpulkan seluruh peliharaan hutan!"
}
+10 -3
View File
@@ -591,13 +591,13 @@
"backgroundFlyingOverGlacierNotes": "Osserva la maestosità ghiacciata sorvolando un ghiacciaio.",
"backgroundFlyingOverGlacierText": "Sorvolando un ghiacciaio",
"backgrounds022021": "SET 81: Rilasciato a febbraio 2021",
"backgroundInTheArmoryText": "Nello scrigno",
"backgroundInTheArmoryText": "Nell'Armeria",
"backgrounds032021": "SET 82: Rilasciato a marzo 2021",
"backgroundSpringThawNotes": "Guarda l'inverno arrendersi al disgelo primaverile.",
"backgroundSpringThawText": "Disgelo di primavera",
"backgroundSplashInAPuddleNotes": "Goditi il la fine della tempesta inzuppandoti in una pozzanghera.",
"backgroundSplashInAPuddleText": "Inzupparsi in una pozzanghera",
"backgroundInTheArmoryNotes": "Preparati nell'armeria.",
"backgroundInTheArmoryNotes": "Preparati nell'Armeria.",
"backgroundElegantGardenNotes": "Percorri i sentieri ben curati di un elegante giardino.",
"backgroundElegantGardenText": "Giardino elegante",
"backgroundCottageConstructionNotes": "Dai una mano, o almeno supervisiona, un cottage in costruzione.",
@@ -742,5 +742,12 @@
"backgroundMistyAutumnForestNotes": "Girovaga attraverso una Nebbiosa Foresta Autunnale.",
"backgroundAutumnBridgeText": "Ponte in Autunno",
"backgroundAutumnBridgeNotes": "Ammira la bellezza di un Ponte in Autunno.",
"backgrounds112022": "SET 102: Rilasciato a novembre 2022"
"backgrounds112022": "SET 102: Rilasciato a novembre 2022",
"backgrounds122022": "SET 103: Rilasciato a dicembre 2022",
"backgroundBranchesOfAHolidayTreeText": "Rami di un Albero Festivo",
"backgroundBranchesOfAHolidayTreeNotes": "Folleggia sui Rami di un Albero Festivo.",
"backgroundInsideACrystalText": "Dentro un Cristallo",
"backgroundInsideACrystalNotes": "Sbircia fuori da Dentro un Cristallo.",
"backgroundSnowyVillageText": "Villaggio Innevato",
"backgroundSnowyVillageNotes": "Ammira un Villaggio Innevato."
}
+15 -1
View File
@@ -2740,5 +2740,19 @@
"weaponArmoireMagicSpatulaText": "Spatola Magica",
"weaponArmoireMagicSpatulaNotes": "Guarda il tuo cibo volare e capovolgersi in aria. Avrai buona fortuna per l'intera giornata se si ribalterà magicamente per tre volte atterrando nuovamente sulla tua spatola. Aumenta la Percezione di <%= per %>. Scrigno Incantato: Set Utensili da Cucina (Oggetto 1 di 2).",
"shieldArmoireBubblingCauldronText": "Calderone Ribollente",
"shieldArmoireBubblingCauldronNotes": "Il calderone perfetto per preparare una pozione di produttività o cucinare una zuppa saporita. In effetti, v'è poca differenza fra le due! Aumenta la Costituzione <%= con %>. Scrigno Incantato: Set Utensili da Cucina (Oggetto 2 di 2)."
"shieldArmoireBubblingCauldronNotes": "Il calderone perfetto per preparare una pozione di produttività o cucinare una zuppa saporita. In effetti, v'è poca differenza fra le due! Aumenta la Costituzione <%= con %>. Scrigno Incantato: Set Utensili da Cucina (Oggetto 2 di 2).",
"shieldArmoireJewelersPliersText": "Pinze del Gioielliere",
"shieldArmoireJewelersPliersNotes": "Tagliano, torcono, pizzicano e altro ancora. Questo strumento può aiutarti a creare tutto ciò che puoi immaginare. Aumenta la Forza di <%= str %>. Scrigno Incantato: Set del Gioielliere (Oggetto 3 di 4).",
"eyewearArmoireJewelersEyeLoupeText": "Lente d'Ingrandimento del Gioielliere",
"eyewearArmoireJewelersEyeLoupeNotes": "Questo monocolo ingrandisce ciò su cui stai lavorando di modo da poter vedere assolutamente ogni dettaglio. Aumenta la Percezione di <%= per %>. Scrigno Incantato: Set del gioielliere (Oggetto 2 di 4).",
"weaponArmoireFinelyCutGemText": "Gioiello Finemente Levigato",
"weaponArmoireFinelyCutGemNotes": "Che scoperta! Questa splendida gemma levigata con precisione sarà il gioiello della tua collezione. E potrebbe contenere una qualche magia speciale, che aspetta solo che tu vi ci attinga. Aumenta la Costituzione di <%= con %>. Scrigno Incantato: Set del Gioielliere (Oggetto 4 di 4).",
"armorArmoireJewelersApronText": "Grembiule del Gioielliere",
"armorArmoireJewelersApronNotes": "Questo resistente grembiule è l'ideale da indossare quando ti senti creativo. E la cosa migliore è che ci sono dozzine di tasche per contenere tutto ciò di cui hai bisogno. Aumenta l'Intelligenza di <%= int %>. Scrigno Incantato: Set del Gioielliere (Oggetto 1 di 4).",
"weaponMystery202212Text": "Bacchetta Glaciale",
"weaponMystery202212Notes": "Il cristallo di neve raggiante di questa bacchetta ha il potere di riscaldare i cuori anche nelle notti invernali più fredde! Non conferisce alcun bonus. Oggetto abbonati dicembre 2022.",
"headAccessoryMystery202212Text": "Tiara Glaciale",
"headAccessoryMystery202212Notes": "Porta il tuo calore e le tue amicizie a nuovi livelli con questa decorata tiara dorata. Non conferisce alcun bonus. Oggetto abbonati dicembre 2022.",
"armorMystery202212Text": "Abito Glaciale",
"armorMystery202212Notes": "L'universo potrà essere freddo, ma quest'incantevole abito ti terrà al caldo mentre voli. Non conferisce alcun bonus. Oggetto abbonati dicembre 2022."
}
+2 -1
View File
@@ -214,5 +214,6 @@
"mysterySet202209": "Set dell'Erudito Magico",
"mysterySet202210": "Set dell'Inquietante Ofidiano",
"mysteryset202211": "Set dell'Elettromante",
"mysterySet202211": "Set dell'Elettromante"
"mysterySet202211": "Set dell'Elettromante",
"mysterySet202212": "Set del Guardiano Glaciale"
}
+1 -1
View File
@@ -2632,7 +2632,7 @@
"weaponSpecialSummer2022RogueText": "カニのハサミ",
"weaponSpecialSummer2022RogueNotes": "ピンチの時は、迷わずこのハサミを見せつけてください!力が<%= str %>上がります。2022年夏の限定装備。",
"weaponSpecialSummer2022WarriorText": "旋回サイクロン",
"weaponSpecialSummer2022WarriorNotes": "回転!向きを変えて!荒らしをもたらします!力が<%= str %>上がります。2022年夏の限定装備。",
"weaponSpecialSummer2022WarriorNotes": "回転!向きを変えて!をもたらします!力が<%= str %>上がります。2022年夏の限定装備。",
"weaponSpecialSummer2022MageText": "マンタの杖",
"weaponSpecialSummer2022MageNotes": "この杖を一回くるっと回すとあなたの前方の水は魔法のように綺麗になります。知能が <%= int %> 、知覚が <%= per %>上がります。2022年夏の限定装備。",
"weaponSpecialSummer2022HealerText": "便利な泡",
+1 -1
View File
@@ -116,7 +116,7 @@
"unsubscribedTextUsers": "Habitica からのメールをすべて停止しました。<a href=\"/user/settings/notifications\">設定 > 通知</a>受け取りたいメールだけを有効にすることができます(要ログイン)。",
"unsubscribedTextOthers": "Habitica から他のメールは届きません。",
"unsubscribeAllEmails": "チェックすると、メールを停止します",
"unsubscribeAllEmailsText": "私はこのボックスをチェックすることですべてのメールを停止し、 サイトやアカウントの変更についての重要な内容であっても Habitica がメールを通じて私に告知することができなくなることを理解したことを証明します。",
"unsubscribeAllEmailsText": "私はこのボックスをチェックすることですべてのメールを停止しHabiticaがサイトやアカウントの重要な変更についてメールで通知できなくなることを理解したことを証明します。",
"unsubscribeAllPush": "チェックすると、すべてのプッシュ通知を停止します",
"correctlyUnsubscribedEmailType": "「<%= emailType %>」のメールを正常に停止しました。",
"subscriptionRateText": "<strong><%= months %>カ月</strong> ごとに <strong><%= price %>米ドル</strong> ずつ",
+12 -1
View File
@@ -731,5 +731,16 @@
"backgroundCemeteryGateText": "Brama Cmentarza",
"backgroundCemeteryGateNotes": "Strasz przy Bramie Cmentarza.",
"backgrounds102022": "SET 101: Opublikowany w październiku 2022",
"backgroundSpookyRuinsNotes": "Zwiedź Straszne Ruiny."
"backgroundSpookyRuinsNotes": "Zwiedź Straszne Ruiny.",
"backgroundSnowyVillageText": "Śnieżna Wioska",
"backgroundAmongGiantMushroomsText": "Pośród Gigantycznych Grzybów",
"backgroundMistyAutumnForestText": "Mglisty Jesienny Las",
"backgrounds112022": "Zestaw 102: Udostępniony w Listopadzie 2022",
"backgroundMistyAutumnForestNotes": "Spacerować pośród Mglistego Jesiennego Lasu.",
"backgroundInsideACrystalText": "Wewnątrz Kryształu",
"backgroundBranchesOfAHolidayTreeText": "Gałązki Choinki",
"backgroundSnowyVillageNotes": "Podziwiać Śnieżną Wioskę.",
"backgroundAutumnBridgeNotes": "Podziwiać piękno Jesiennego Mostu.",
"backgrounds122022": "Zestaw 103: Wypuszczony w Grudniu 2022",
"backgroundInsideACrystalNotes": "Wyjrzeć z wnętrza Kryształu."
}
+57 -50
View File
@@ -165,7 +165,7 @@
"backgroundGiantFlowersNotes": "Divirta-se em cima de Flores Gigantes.",
"backgroundRainbowsEndText": "Fim do Arco-íris",
"backgroundRainbowsEndNotes": "Descubra o ouro no Fim do Arco-íris.",
"backgrounds052016": "Conjunto 24: Lançado em Maio de 2016",
"backgrounds052016": "Conjunto 24: Lançado em maio de 2016",
"backgroundBeehiveText": "Colmeia",
"backgroundBeehiveNotes": "Faça zumbidos e dance em uma Colmeia.",
"backgroundGazeboText": "Gazebo",
@@ -186,7 +186,7 @@
"backgroundDeepSeaNotes": "Mergulhe no Mar Profundo.",
"backgroundDilatoryCastleText": "Castelo de Lentópolis",
"backgroundDilatoryCastleNotes": "Nade além do Castelo de Lentópolis.",
"backgrounds082016": "Conjunto 27: Lançado em Agosto de 2016",
"backgrounds082016": "Conjunto 27: Lançado em agosto de 2016",
"backgroundIdyllicCabinText": "Cabana Bucólica",
"backgroundIdyllicCabinNotes": "Faça um retiro em uma Cabana Bucólica.",
"backgroundMountainPyramidText": "Montanha Pirâmide",
@@ -200,14 +200,14 @@
"backgroundFarmhouseNotes": "Diga olá para os animais em seu caminho para a Casa da Fazenda.",
"backgroundOrchardText": "Pomar",
"backgroundOrchardNotes": "Colha frutos maduros de um Pomar.",
"backgrounds102016": "Conjunto 29: Lançado em Outubro de 2016",
"backgrounds102016": "Conjunto 29: Lançado em outubro de 2016",
"backgroundSpiderWebText": "Teia de Aranha",
"backgroundSpiderWebNotes": "Fique preso em uma Teia de Aranha.",
"backgroundStrangeSewersText": "Esgotos Estranhos",
"backgroundStrangeSewersNotes": "Deslize através de Esgotos Estranhos.",
"backgroundRainyCityText": "Cidade Chuvosa",
"backgroundRainyCityNotes": "Se molhe por aí em uma Cidade Chuvosa.",
"backgrounds112016": "Conjunto 30: Lançado em Novembro de 2016",
"backgrounds112016": "Conjunto 30: Lançado em novembro de 2016",
"backgroundMidnightCloudsText": "Nuvens da Meia-noite",
"backgroundMidnightCloudsNotes": "Voe através das Nuvens da Meia-noite.",
"backgroundStormyRooftopsText": "Telhados Tempestuosos",
@@ -227,14 +227,14 @@
"backgroundRedNotes": "Um cenário vermelho vigoroso.",
"backgroundYellowText": "Amarelo",
"backgroundYellowNotes": "Um delicioso cenário amarelo.",
"backgrounds122016": "Conjunto 31: Lançado em Dezembro de 2016",
"backgrounds122016": "Conjunto 31: Lançado em dezembro de 2016",
"backgroundShimmeringIcePrismText": "Prismas de Gelo Cintilantes",
"backgroundShimmeringIcePrismNotes": "Dance através dos Prismas de Gelo Cintilantes.",
"backgroundWinterFireworksText": "Fogos de Artifício de Inverno",
"backgroundWinterFireworksNotes": "Solte Fogos de Artifício de Inverno.",
"backgroundWinterStorefrontText": "Loja de Inverno",
"backgroundWinterStorefrontNotes": "Compre presentes na Loja de Inverno.",
"backgrounds012017": "Conjunto 32: Lançado em Janeiro de 2017",
"backgrounds012017": "Conjunto 32: Lançado em janeiro de 2017",
"backgroundBlizzardText": "Nevasca",
"backgroundBlizzardNotes": "Enfrente uma Nevasca feroz.",
"backgroundSparklingSnowflakeText": "Floco de Neve Brilhante",
@@ -248,35 +248,35 @@
"backgroundTreasureRoomNotes": "Desfrute das riquezas de uma Sala do Tesouro.",
"backgroundWeddingArchText": "Arco de Casamento",
"backgroundWeddingArchNotes": "Pose embaixo do Arco de Casamento.",
"backgrounds032017": "Conjunto 34: Lançado em Março de 2017",
"backgrounds032017": "Conjunto 34: Lançado em março de 2017",
"backgroundMagicBeanstalkText": "Pé-de-Feijão Mágico",
"backgroundMagicBeanstalkNotes": "Suba num Pé-de-Feijão Mágico.",
"backgroundMeanderingCaveText": "Caverna Serpenteante",
"backgroundMeanderingCaveNotes": "Explore a Caverna Serpenteante.",
"backgroundMistiflyingCircusText": "Circo de Borbópolis",
"backgroundMistiflyingCircusNotes": "Festeje no Circo de Borbópolis.",
"backgrounds042017": "Conjunto 35: Lançado em Abril de 2017",
"backgrounds042017": "Conjunto 35: Lançado em abril de 2017",
"backgroundBugCoveredLogText": "Tronco Cheio de Insetos",
"backgroundBugCoveredLogNotes": "Investigue um Tronco Cheio de Insetos.",
"backgroundGiantBirdhouseText": "Ninho Gigante de Pássaro",
"backgroundGiantBirdhouseNotes": "Repouse em um Ninho Gigante de Pássaro.",
"backgroundMistShroudedMountainText": "Montanha Coberta de Neblina",
"backgroundMistShroudedMountainNotes": "Escale uma Montanha Coberta de Neblina.",
"backgrounds052017": "Conjunto 36: Lançado em Maio de 2017",
"backgrounds052017": "Conjunto 36: Lançado em maio de 2017",
"backgroundGuardianStatuesText": "Estátuas do Guardião",
"backgroundGuardianStatuesNotes": "Permaneça atento em frente às Estátuas do Guardião.",
"backgroundHabitCityStreetsText": "Ruas da Cidade dos Hábitos",
"backgroundHabitCityStreetsNotes": "Explore as Ruas da Cidade dos Hábitos.",
"backgroundOnATreeBranchText": "Em um Galho de Árvore",
"backgroundOnATreeBranchNotes": "Descanse em um Galho de Árvore.",
"backgrounds062017": "Conjunto 37: Lançado em Junho de 2017",
"backgrounds062017": "Conjunto 37: Lançado em junho de 2017",
"backgroundBuriedTreasureText": "Tesouro Enterrado",
"backgroundBuriedTreasureNotes": "Descubra um Tesouro Enterrado.",
"backgroundOceanSunriseText": "Nascer do Sol no Oceano",
"backgroundOceanSunriseNotes": "Admire um Nascer do Sol no Oceano.",
"backgroundSandcastleText": "Castelo de Areia",
"backgroundSandcastleNotes": "Governe um Castelo de Areia.",
"backgrounds072017": "Conjunto 38: Lançado em Julho de 2017",
"backgrounds072017": "Conjunto 38: Lançado em julho de 2017",
"backgroundGiantSeashellText": "Concha Gigante",
"backgroundGiantSeashellNotes": "Relaxe em uma Concha Gigante.",
"backgroundKelpForestText": "Floresta de Algas",
@@ -290,7 +290,7 @@
"backgroundDesertDunesNotes": "Explore com bravura as Dunas do Deserto.",
"backgroundSummerFireworksText": "Fogos de Artifício de Verão",
"backgroundSummerFireworksNotes": "Celebre o Dia da Nomeação do Habitica com Fogos de Artifício de Verão!",
"backgrounds092017": "Conjunto 40: Lançado em Setembro de 2017",
"backgrounds092017": "Conjunto 40: Lançado em setembro de 2017",
"backgroundBesideWellText": "Ao Lado de um Poço",
"backgroundBesideWellNotes": "Passeie Ao Lado de um Poço.",
"backgroundGardenShedText": "Casinha do Jardim",
@@ -304,35 +304,35 @@
"backgroundSpookyHotelNotes": "Esgueire-se pelos corredores de um Hotel Assustador.",
"backgroundTarPitsText": "Fossos de Piche",
"backgroundTarPitsNotes": "Ande na ponta dos pés através dos Fossos de Piche.",
"backgrounds112017": "Conjunto 42: Lançado em Novembro de 2017",
"backgrounds112017": "Conjunto 42: Lançado em novembro de 2017",
"backgroundFiberArtsRoomText": "Ateliê de Crochê",
"backgroundFiberArtsRoomNotes": "Gire o carretel no Ateliê de Crochê.",
"backgroundMidnightCastleText": "Castelo da Meia-Noite",
"backgroundMidnightCastleNotes": "Ande pelo Castelo da Meia-Noite.",
"backgroundTornadoText": "Tornado",
"backgroundTornadoNotes": "Voe por um Tornado.",
"backgrounds122017": "Conjunto 43: Lançado em Dezembro de 2017",
"backgrounds122017": "Conjunto 43: Lançado em dezembro de 2017",
"backgroundCrosscountrySkiTrailText": "Trilha de Ski Transcontinental",
"backgroundCrosscountrySkiTrailNotes": "Deslize por uma Trilha de Ski Transcontinental.",
"backgroundStarryWinterNightText": "Noite Estrelada de Inverno",
"backgroundStarryWinterNightNotes": "Admire uma Noite Estrelada de Inverno.",
"backgroundToymakersWorkshopText": "Oficina do Criador de Brinquedos",
"backgroundToymakersWorkshopNotes": "Banhe-se na maravilha da Oficina do Criador de Brinquedos.",
"backgrounds012018": "Conjunto 44: Lançado em Janeiro de 2018",
"backgrounds012018": "Conjunto 44: Lançado em janeiro de 2018",
"backgroundAuroraText": "Aurora",
"backgroundAuroraNotes": "Aqueça-se no brilho da Aurora.",
"backgroundDrivingASleighText": "Trenó",
"backgroundDrivingASleighNotes": "Ande de Trenó sobre os campos cobertos de neve.",
"backgroundFlyingOverIcySteppesText": "Estepes Gelados",
"backgroundFlyingOverIcySteppesNotes": "Voe sobre Estepes Gelados.",
"backgrounds022018": "Conjunto 45: Lançado em Fevereiro de 2018",
"backgrounds022018": "Conjunto 45: Lançado em fevereiro de 2018",
"backgroundChessboardLandText": "Terra do Tabuleiro de Xadrez",
"backgroundChessboardLandNotes": "Jogue uma partida na Terra do Tabuleiro de Xadrez.",
"backgroundMagicalMuseumText": "Museu Mágico",
"backgroundMagicalMuseumNotes": "Visite um Museu Mágico.",
"backgroundRoseGardenText": "Jardim de Rosas",
"backgroundRoseGardenNotes": "Distraia em um Jardim de Rosas perfumado.",
"backgrounds032018": "Conjunto 46: Lançado em Março de 2018",
"backgrounds032018": "Conjunto 46: Lançado em março de 2018",
"backgroundGorgeousGreenhouseText": "Estufa Deslumbrante",
"backgroundGorgeousGreenhouseNotes": "Caminhe entre a flora de uma Estufa Deslumbrante.",
"backgroundElegantBalconyText": "Varanda Elegante",
@@ -353,7 +353,7 @@
"backgroundFantasticalShoeStoreNotes": "Divirta-se procurando um novo sapato na Fantástica Loja de Sapatos.",
"backgroundChampionsColosseumText": "Coliseu dos Campeões",
"backgroundChampionsColosseumNotes": "Encandeça-se na glória do Coliseu dos Campeões.",
"backgrounds062018": "Conjunto 49: Lançado em Junho de 2018",
"backgrounds062018": "Conjunto 49: Lançado em junho de 2018",
"backgroundDocksText": "Docas",
"backgroundDocksNotes": "Pesque pelas Docas.",
"backgroundRowboatText": "Barco a Remo",
@@ -395,7 +395,7 @@
"backgroundGlowingMushroomCaveNotes": "Admire uma Caverna de Cogumelos Brilhantes.",
"backgroundCozyBedroomText": "Quarto Aconchegante",
"backgroundCozyBedroomNotes": "Deite em um Quarto Aconchegante.",
"backgrounds122018": "Conjunto 55: Lançado em Dezembro de 2018",
"backgrounds122018": "Conjunto 55: Lançado em dezembro de 2018",
"backgroundFlyingOverSnowyMountainsText": "Montanhas Nevadas",
"backgroundFlyingOverSnowyMountainsNotes": "Sobrevoe as Montanhas Nevadas à noite.",
"backgroundFrostyForestText": "Floresta Gélida",
@@ -409,21 +409,21 @@
"backgroundArchaeologicalDigNotes": "Desenterre segredos de um passado remoto em uma Escavação Arqueológica.",
"backgroundScribesWorkshopText": "Oficina do Escriba",
"backgroundScribesWorkshopNotes": "Escreva seu próximo grande pergaminho na Oficina do Escriba.",
"backgrounds022019": "Conjunto 57: Lançado em Fevereiro de 2019",
"backgrounds022019": "Conjunto 57: Lançado em fevereiro de 2019",
"backgroundMedievalKitchenText": "Cozinha Medieval",
"backgroundMedievalKitchenNotes": "Cozinhe para um banquete em uma Cozinha Medieval.",
"backgroundOldFashionedBakeryText": "Padaria à Moda Antiga",
"backgroundOldFashionedBakeryNotes": "Aproveite os cheiros deliciosos, do lado de fora de uma Padaria à Moda Antiga.",
"backgroundValentinesDayFeastingHallText": "Salão de Festas do Dia dos Namorados",
"backgroundValentinesDayFeastingHallNotes": "Sinta o amor no Salão de Festas do Dia dos Namorados.",
"backgrounds032019": "Conjunto 58: Lançado em Março de 2019",
"backgrounds032019": "Conjunto 58: Lançado em março de 2019",
"backgroundDuckPondText": "Lagoa dos Patos",
"backgroundDuckPondNotes": "Alimente aves aquáticas na Lagoa dos Patos.",
"backgroundFieldWithColoredEggsText": "Campo com Ovos Coloridos",
"backgroundFieldWithColoredEggsNotes": "Cace pelo tesouro de primavera em um Campo com Ovos Coloridos.",
"backgroundFlowerMarketText": "Mercado de Flores",
"backgroundFlowerMarketNotes": "Encontre as cores perfeitas para um buquê ou um jardim no Mercado de Flores.",
"backgrounds042019": "Conjunto 59: Lançado em Abril de 2019",
"backgrounds042019": "Conjunto 59: Lançado em abril de 2019",
"backgroundBirchForestText": "Floresta de Bétulas",
"backgroundBirchForestNotes": "Divirta-se em uma pacífica Floresta de Bétulas.",
"backgroundHalflingsHouseText": "Casa de Halfling",
@@ -448,7 +448,7 @@
"backgroundInAnAncientTombText": "Tumba Antiga",
"backgroundAutumnFlowerGardenNotes": "Sinta o calor de um Jardim de Flores de Outono.",
"backgroundAutumnFlowerGardenText": "Jardim de Flores de Outono",
"backgrounds092019": "Conjunto 64: Lançado em Setembro de 2019",
"backgrounds092019": "Conjunto 64: Lançado em setembro de 2019",
"backgroundTreehouseNotes": "Curta em um refúgio arbóreo todo para você, na sua própria Casa na Árvore.",
"backgroundTreehouseText": "Casa na Árvore",
"backgroundGiantDandelionsNotes": "Flerte entre os Dentes-de-Leão Gigantes.",
@@ -506,7 +506,7 @@
"backgroundHallOfHeroesText": "Salão dos Heróis",
"backgroundElegantBallroomNotes": "Dance ao longo da noite em um Salão de Festas Elegante.",
"backgroundElegantBallroomText": "Salão de Festas Elegante",
"backgrounds022020": "Conjunto 69: Lançado em Fevereiro de 2020",
"backgrounds022020": "Conjunto 69: Lançado em fevereiro de 2020",
"backgroundSucculentGardenNotes": "Aprecie a beleza árida de um Jardim de Suculentas.",
"backgroundSucculentGardenText": "Jardim de Suculentas",
"backgroundButterflyGardenNotes": "Festeje com polinizadores em um Jardim de Borboletas.",
@@ -520,48 +520,48 @@
"backgroundHeatherFieldText": "Campo de Urzes",
"backgroundAnimalCloudsNotes": "Exercite sua imaginação encontrando formas de Animais nas Nuvens.",
"backgroundAnimalCloudsText": "Nuvens de Animais",
"backgrounds042020": "Conjunto 71: Lançado em Abril de 2020",
"backgrounds042020": "Conjunto 71: Lançado em abril de 2020",
"backgroundStrawberryPatchNotes": "Colha iguarias frescas de um Campo de Morango.",
"backgroundStrawberryPatchText": "Campo de Morango",
"backgroundHotAirBalloonNotes": "Voe acima da paisagem em um Balão de Ar Quente.",
"backgroundHotAirBalloonText": "Balão de Ar Quente",
"backgroundHabitCityRooftopsNotes": "Salte aventurando-se entre os Telhados da Cidade dos Hábitos.",
"backgroundHabitCityRooftopsText": "Telhados da Cidade dos Hábitos",
"backgrounds052020": "Conjunto 72: Lançado em Maio de 2020",
"backgrounds052020": "Conjunto 72: Lançado em maio de 2020",
"backgroundVikingShipNotes": "Navegue para a aventura a bordo de um Navio Viking.",
"backgroundVikingShipText": "Navio Viking",
"backgroundSaltLakeNotes": "Veja as impressionantes ondulações vermelhas de um Lago Salgado.",
"backgroundSaltLakeText": "Lago Salgado",
"backgroundRelaxationRiverNotes": "Desça vagarosamente pelo Rio do Relaxamento.",
"backgroundRelaxationRiverText": "Rio do Relaxamento",
"backgrounds062020": "Conjunto 73: Lançado em Junho de 2020",
"backgrounds062020": "Conjunto 73: Lançado em junho de 2020",
"backgroundUnderwaterRuinsNotes": "Explore Ruínas Subaquáticas submersas há muito tempo.",
"backgroundUnderwaterRuinsText": "Ruínas Subaquáticas",
"backgroundSwimmingAmongJellyfishNotes": "Emocione-se com beleza e perigo Nadando entre Águas-Vivas.",
"backgroundSwimmingAmongJellyfishText": "Nadando entre Águas-Vivas",
"backgroundBeachCabanaNotes": "Relaxe na sombra de uma Cabana de Praia.",
"backgroundBeachCabanaText": "Cabana de Praia",
"backgrounds072020": "Conjunto 74: Lançado em Julho de 2020",
"backgrounds072020": "Conjunto 74: Lançado em julho de 2020",
"backgroundProductivityPlazaNotes": "Faça um passeio inspirador pela Praça da Produtividade da Cidade dos Hábitos.",
"backgroundProductivityPlazaText": "Praça da Produtividade",
"backgroundJungleCanopyNotes": "Aproveite o esplendor sufocante de uma Copa da Selva.",
"backgroundJungleCanopyText": "Copa da Selva",
"backgroundCampingOutNotes": "Aproveite o ar livre Acampando.",
"backgroundCampingOutText": "Acampando",
"backgrounds082020": "Conjunto 75: Lançado em Agosto de 2020",
"backgrounds082020": "Conjunto 75: Lançado em agosto de 2020",
"backgroundHerdingSheepInAutumnNotes": "Misture-se com um Rebanho de Ovelhas.",
"backgroundHerdingSheepInAutumnText": "Rebanho de Ovelhas",
"backgroundGiantAutumnLeafNotes": "Pouse em uma Folha Gigante antes que ela caia.",
"backgroundGiantAutumnLeafText": "Folha Gigante",
"backgroundFlyingOverAnAutumnForestNotes": "Absorva as cores brilhantes abaixo Voando sobre uma Floresta de Outono.",
"backgroundFlyingOverAnAutumnForestText": "Voando sobre uma Floresta no Outono",
"backgrounds092020": "Conjunto 76: Lançado em Setembro de 2020",
"backgrounds092020": "Conjunto 76: Lançado em setembro de 2020",
"backgroundSpookyScarecrowFieldText": "Campo de Espantalho Assustador",
"backgroundHauntedForestNotes": "Tente não se perder na Floresta Assombrada.",
"backgroundHauntedForestText": "Floresta Assombrada",
"backgroundCrescentMoonNotes": "Faça o trabalho dos sonhos sentado em uma Lua Crescente.",
"backgroundCrescentMoonText": "Lua Crescente",
"backgrounds102020": "Conjunto 77: Lançado em Outubro de 2020",
"backgrounds102020": "Conjunto 77: Lançado em outubro de 2020",
"backgroundSpookyScarecrowFieldNotes": "Prove que você é mais ousado do que um pássaro ao enfrentar um Campo de Espantalho Assustador.",
"backgroundRiverOfLavaNotes": "Desafie a convecção dando um passeio ao longo do Rio de Lava.",
"backgroundRiverOfLavaText": "Rio de Lava",
@@ -569,17 +569,17 @@
"backgroundRestingInTheInnText": "Descansando na Taverna",
"backgroundMysticalObservatoryNotes": "Leia o seu destino nas estrelas a partir de um Observatório Místico.",
"backgroundMysticalObservatoryText": "Observatório Místico",
"backgrounds112020": "Conjunto 78: Lançado em Novembro de 2020",
"backgrounds112020": "Conjunto 78: Lançado em novembro de 2020",
"backgroundInsideAnOrnamentNotes": "Deixe sua alegria festiva brilhar de Dentro de um Ornamento.",
"backgroundInsideAnOrnamentText": "Dentro de um Ornamento",
"backgroundHolidayHearthNotes": "Relaxe, se aqueça e seque-se ao lado de uma Lareira de Feriado.",
"backgroundHolidayHearthText": "Lareira de Feriado",
"backgroundGingerbreadHouseNotes": "Aproveite a vista, os aromas e (se você ousar) os sabores de uma Casa de Pão de Gengibre.",
"backgroundGingerbreadHouseText": "Casa de Pão de Gengibre",
"backgrounds122020": "Conjunto 79: Lançado em Dezembro de 2020",
"backgrounds122020": "Conjunto 79: Lançado em dezembro de 2020",
"backgroundHotSpringNotes": "Derreta suas preocupações com um mergulho em uma Fonte Termal.",
"backgroundHotSpringText": "Fonte Termal",
"backgrounds012021": "Conjunto 80: Lançado em Janeiro de 2021",
"backgrounds012021": "Conjunto 80: Lançado em janeiro de 2021",
"backgroundWintryCastleNotes": "Veja o Castelo Invernal através da névoa fria.",
"backgroundWintryCastleText": "Castelo Invernal",
"backgroundIcicleBridgeNotes": "Atravesse a Ponte Congelada com cuidado.",
@@ -590,12 +590,12 @@
"backgroundHeartShapedBubblesText": "Bolhas em Forma de Coração",
"backgroundFlyingOverGlacierNotes": "Testemunhe a grandeza congelada Sobrevoando uma Geleira.",
"backgroundFlyingOverGlacierText": "Sobrevoando uma Geleira",
"backgrounds022021": "Conjunto 81: Lançado em Fevereiro de 2021",
"backgrounds022021": "Conjunto 81: Lançado em fevereiro de 2021",
"backgroundSplashInAPuddleNotes": "Desfrute da consequência da tempestade Salpicando em uma Poça d'Água.",
"backgroundSplashInAPuddleText": "Salpicando em uma Poça d'Água",
"backgroundInTheArmoryNotes": "Equipe-se No Arsenal.",
"backgroundInTheArmoryText": "No Arsenal",
"backgrounds032021": "Conjunto 82: Lançado em Março de 2021",
"backgrounds032021": "Conjunto 82: Lançado em março de 2021",
"backgroundSpringThawNotes": "Assista a transição do inverno para o Degelo da Primavera.",
"backgroundSpringThawText": "Degelo da Primavera",
"backgroundElegantGardenText": "Jardim Elegante",
@@ -605,7 +605,7 @@
"backgroundCottageConstructionText": "Chalé em Construção",
"backgroundCottageConstructionNotes": "Ajude ou ao menos supervisione um Chalé em Construção.",
"backgroundElegantGardenNotes": "Ande nesse Jardim Elegante bem cuidado.",
"backgrounds052021": "Conjunto 84: Lançado em Maio de 2021",
"backgrounds052021": "Conjunto 84: Lançado em maio de 2021",
"backgroundAfternoonPicnicText": "Piquenique da Tarde",
"backgroundAfternoonPicnicNotes": "Aproveite um Piquinique de Tarde sozinho(a) ou com seu mascote.",
"backgroundDragonsLairText": "Covil do Dragão",
@@ -638,22 +638,22 @@
"backgroundAutumnPoplarsNotes": "Deleite-se nos brilhantes tons de marrom e dourado na Floresta do Álamo Outonal.",
"backgroundVineyardNotes": "Explore a ramificação de um Vinhedo frutífero.",
"backgroundVineyardText": "Vinhedo",
"backgrounds092021": "Conjunto 88: Lançado em Setembro de 2021",
"backgrounds092021": "Conjunto 88: Lançado em setembro de 2021",
"backgroundAutumnLakeshoreText": "Margem do Lago Outonal",
"backgrounds102021": "Conjunto 89: Lançado em Outubro de 2021",
"backgrounds102021": "Conjunto 89: Lançado em outubro de 2021",
"backgroundCrypticCandlesText": "Velas Enigmáticas",
"backgroundCrypticCandlesNotes": "Invoca forças misteriosas entre velas enigmáticas.",
"backgroundHauntedPhotoText": "Foto Assombrada",
"backgroundHauntedPhotoNotes": "Se encontre preso no mundo monocromático de uma Foto Assombrada.",
"backgroundUndeadHandsText": "Mãos Mortas-vivas",
"backgroundUndeadHandsNotes": "Tente escapar das garras de Mãos Mortas-vivas.",
"backgrounds122021": "Conjunto 91: Lançado em Dezembro de 2021",
"backgrounds122021": "Conjunto 91: Lançado em dezembro de 2021",
"backgroundFrozenPolarWatersText": "Águas Polares Congeladas",
"backgroundWinterCanyonText": "Cânion Invernal",
"backgroundWinterCanyonNotes": "Aventure-se num Cânion Invernal!",
"backgroundIcePalaceText": "Palácio de Gelo",
"backgroundIcePalaceNotes": "Reine no Palácio de Gelo.",
"backgrounds012022": "Conjunto 92: Lançado em Janeiro de 2022",
"backgrounds012022": "Conjunto 92: Lançado em janeiro de 2022",
"backgroundMeteorShowerText": "Chuva de Meteoros",
"backgroundMeteorShowerNotes": "Contemple a deslumbrante exibição noturna de uma Chuva de Meteoros.",
"backgroundPalmTreeWithFairyLightsText": "Palmeira em Luzes de Natal",
@@ -661,19 +661,19 @@
"backgroundSnowyFarmNotes": "Veja se estão todos bem e aquecidos em sua Fazenda Nevada.",
"backgroundFrozenPolarWatersNotes": "Explore Águas Polares Congeladas.",
"backgroundPalmTreeWithFairyLightsNotes": "Faça uma pose ao lado de uma Palmeira enfeitada com Luzes de Natal.",
"backgrounds112021": "Conjunto 90: Lançado em Novembro de 2021",
"backgrounds112021": "Conjunto 90: Lançado em novembro de 2021",
"backgroundFortuneTellersShopText": "Loja do Adivinho",
"backgroundInsideAPotionBottleText": "No Frasco de Poção",
"backgroundInsideAPotionBottleNotes": "Espie pelo vidro enquanto aguarda seu resgate No Frasco de Poção.",
"backgroundFortuneTellersShopNotes": "ouça sugestões irresistíveis sobre seu futuro numa Loja do Adivinho.",
"backgroundSpiralStaircaseNotes": "Suba, desça, sempre a rodar na Escadaria Espiral.",
"backgroundSpiralStaircaseText": "Escadaria Espiral",
"backgrounds022022": "Conjunto 93: Lançado em Fevereiro de 2022",
"backgrounds032022": "Conjunto 94: Lançado em Março de 2022",
"backgrounds022022": "Conjunto 93: Lançado em fevereiro de 2022",
"backgrounds032022": "Conjunto 94: Lançado em março de 2022",
"backgroundWinterWaterfallText": "Cachoeira Invernal",
"backgroundOrangeGroveText": "Laranjal",
"backgrounds042022": "Conjunto 95: Lançado em Abril de 2022",
"backgrounds052022": "Conjunto 96: Lançado em Maio de 2022",
"backgrounds042022": "Conjunto 95: Lançado em abril de 2022",
"backgrounds052022": "Conjunto 96: Lançado em maio de 2022",
"backgroundWinterWaterfallNotes": "Maravilhe-se diante de uma Cachoeira Invernal.",
"backgroundIridescentCloudsNotes": "Flutue nas Nuvens Iridescentes.",
"backgroundIridescentCloudsText": "Nuvens Iridescentes",
@@ -685,7 +685,7 @@
"backgroundFloweringPrairieNotes": "Divirta-se em uma Pradaria Florida.",
"backgroundOnACastleWallText": "Muralha do Castelo",
"backgroundCastleGateNotes": "Monte guarda no Portão do Castelo.",
"backgrounds062022": "Conjunto 97: Lançado em Junho de 2022",
"backgrounds062022": "Conjunto 97: Lançado em junho de 2022",
"backgroundBeachWithDunesText": "Praia com Dunas",
"backgroundBeachWithDunesNotes": "Explore a Praia com Dunas.",
"backgroundMountainWaterfallText": "Cachoeira da Montanha",
@@ -715,10 +715,10 @@
"backgroundMessyRoomNotes": "Arrume um Quarto Bagunçado.",
"backgroundByACampfireText": "Perto de Uma Fogueira",
"backgroundByACampfireNotes": "Aqueça-se na faísca Perto de uma Fogueira.",
"backgrounds082022": "Conjunto 99: Lançado em Agosto de 2022",
"backgrounds082022": "Conjunto 99: Lançado em agosto de 2022",
"backgroundRainbowEucalyptusText": "Eucalipto Arco-íris",
"backgroundRainbowEucalyptusNotes": "Admire um bosque de Eucalipto Arco-íris.",
"backgrounds092022": "Conjunto 100: Lançado em Setembro de 2022",
"backgrounds092022": "Conjunto 100: Lançado em setembro de 2022",
"backgroundOldPhotoNotes": "Faça uma pose em um Retrato Antigo.",
"backgroundOldPhotoText": "Retrato Antigo",
"backgroundAutumnPicnicNotes": "Aproveite um Piquenique de Outono.",
@@ -738,5 +738,12 @@
"backgroundMistyAutumnForestText": "Floresta de Outono Enevoada",
"backgroundMistyAutumnForestNotes": "Caminhar por uma Floresta de Outono Enevoada.",
"backgroundAutumnBridgeText": "Ponte no Outono",
"backgroundAutumnBridgeNotes": "Apreciar a beleza de uma Ponte no Outono."
"backgroundAutumnBridgeNotes": "Apreciar a beleza de uma Ponte no Outono.",
"backgrounds122022": "Conjunto 103: Lançado em dezembro de 2022",
"backgroundBranchesOfAHolidayTreeNotes": "Brinque nos Galhos de uma Árvore Natalina.",
"backgroundBranchesOfAHolidayTreeText": "Galhos de uma Árvore Natalina",
"backgroundInsideACrystalText": "Dentro de um Cristal",
"backgroundSnowyVillageText": "Aldeia Nevada",
"backgroundSnowyVillageNotes": "Admire uma Aldeia Nevada.",
"backgroundInsideACrystalNotes": "Observe a vista Dentro de um Cristal."
}
+15 -1
View File
@@ -2740,5 +2740,19 @@
"shieldArmoireBubblingCauldronText": "Caldeirão Borbulhante",
"shieldArmoireBubblingCauldronNotes": "O caldeirão perfeito para preparar uma poção produtiva ou cozinhar uma sopa saborosa. De fato, há pouca diferença entre as duas! Aumenta Constituição em <%= con %>. Armário Encantado: Conjunto Utensílios de Cozinha (item 2 de 2).",
"weaponArmoireMagicSpatulaText": "Espátula Mágica",
"weaponArmoireMagicSpatulaNotes": "Observe sua comida voar e virar no ar. Você obtém sorte no dia se virar três vezes e então cair de volta em sua espátula. Aumenta Percepção em <%= per %>. Armário Encantado: Conjunto Utensílios de Cozinha (item 1 de 2)."
"weaponArmoireMagicSpatulaNotes": "Observe sua comida voar e virar no ar. Você obtém sorte no dia se virar três vezes e então cair de volta em sua espátula. Aumenta Percepção em <%= per %>. Armário Encantado: Conjunto Utensílios de Cozinha (item 1 de 2).",
"armorMystery202212Notes": "O universo pode ser gelado, mas este vestido charmoso te manterá aconchegante enquanto voa. Não confere benefícios. Item de Assinante de dezembro de 2022.",
"armorArmoireJewelersApronNotes": "Este avental resistente é a roupa perfeita para vestir nos momentos criativos. O melhor de tudo é que há dezenas de pequenos bolsos para guardar tudo que precisa. Aumenta a Inteligência em <%=int%>. Armário Encantado: Conjunto Joalheiro (Item 1 de 4).",
"shieldArmoireJewelersPliersNotes": "Cortam, giram, apertam e muito mais. Esta ferramenta pode te ajudar a criar tudo que imaginar. Aumenta Força em <%= str %>. Armário Encantado: Conjunto Joalheiro (Item 3 de 4).",
"armorMystery202212Text": "Vestido Glacial",
"headAccessoryMystery202212Notes": "Fique mais quentinho e faça amizades de outro nível com esta tiara dourada ornamentada. Não confere benefícios. Item de Assinante de dezembro de 2022.",
"eyewearArmoireJewelersEyeLoupeText": "Lupa de Joalheiro",
"eyewearArmoireJewelersEyeLoupeNotes": "Esta lupa amplia seu trabalho para que possa ver absolutamente cada detalhe. Aumenta Percepção em <%= per %>. Armário Encantado: Conjunto Joalheiro (Item 2 de 4).",
"weaponArmoireFinelyCutGemNotes": "Você achou! Essa gema deslumbrante e com um corte preciso será o prêmio de sua coleção. E talvez contenha alguma mágica especial, apenas esperando seu toque. Aumenta Constituição em <%= con %>. Armário Encantado: Conjunto Joalheiro (Item 4 de 4).",
"weaponMystery202212Text": "Varinha Glacial",
"weaponMystery202212Notes": "O floco de neve brilhante desta varinha possui o poder de aquecer corações, mesmo na noite mais gelada do inverno! Não confere benefícios. Item de Assinante de dezembro de 2022.",
"weaponArmoireFinelyCutGemText": "Gema Finamente Cortada",
"armorArmoireJewelersApronText": "Avental de Joalheiro",
"shieldArmoireJewelersPliersText": "Alicate de Joalheiro",
"headAccessoryMystery202212Text": "Tiara Glacial"
}
+14 -14
View File
@@ -314,8 +314,8 @@
"questSnailUnlockText": "Desbloqueia Ovos de Caracol para compra no Mercado",
"questBewilderText": "O Ilusion-lista",
"questBewilderNotes": "A festa começa como qualquer outra.<br><br>Os aperitivos estão excelentes, a música está animada e até os elefantes dançarinos já são rotineiros. Os Habiticanos riem e conversam entre as abundantes flores dos centros de mesa, contentes por se distraírem das suas tarefas mais chatas, e o Primeiro de Abril rodopia entre eles, avidamente executando truques e fazendo piadas.<br><br>Assim que a torre-relógio de Mistyflying bate meia-noite, o Primeiro de Abril salta para o palco e começa um discurso.<br><br>\"Amigos! Inimigos! Conhecidos toleráveis! Dêem-me a vossa atenção.\" A multidão ri quando orelhas de animais aparecem nas suas cabeças e fazem poses com os seus novos acessórios.<br><br>\"Como sabem\", continua o Palhaço, \"as minhas divertidas ilusões normalmente duram somente um dia. No entanto, é o meu prazer anunciar que descobri uma forma de nos garantir diversão sem fim, sem o intrometido peso de nossas responsabilidades. Ilustres Habiticanos, conheçam o meu novo amigo mágico...O Ilusion-lista!\"<br><br>Lemoness empalidece subitamente, deixando cair os seus aperitivos. \"Esperem! Não confiem--\"<br><br>Subitamente uma névoa espessa e brilhante preenche a sala, rodopiando ao redor do Primeiro de Abril, transformando-se em penas e um pescoço alongado. A multidão fica sem palavras enquanto um pássaro monstruoso se materializa à sua frente, suas asas de brilhantes ilusões. Ele solta um riso estridente.<br><br>\"Ah! Faz eras desde que um Habiticano foi tolo o suficiente para me invocar! Que maravilhosa esta sensação de ter uma forma novamente.\"<br><br>Zumbindo de terror, as abelhas de Mistiflying fogem da cidade flutuante, que começa a descer do céu. Uma a uma, as brilhantes flores de primavera começam a secar e a flutuar ao vento.<br><br>\"Meus caros amigos, por que este pânico?\", grita o Ilusion-lista, batendo as suas asas. \"Não é necessário trabalhar mais pelas vossas recompensas. Eu simplesmente dar-vos-ei tudo o que desejam!\"<br><br>Moedas começam a chover do céu, batendo no solo com força e a multidão foge em busca de abrigo. \"Isso é uma piada?\" grita Baconsaur, enquanto o ouro parte janelas e telhas.<br><br>PainterProphet agacha-se enquanto relâmpagos caem e um nevoeiro tapa o Sol. \"Não! Desta vez, não creio que seja!\"<br><br>Depressa Habiticanos, não deixem que este Chefão Global os distraia dos seus objetivos! Mantenham o foco nas tarefas que precisam de completar para salvar Mistiflying -- e, com sorte, todos nós.",
"questBewilderCompletion": "<strong>O Ilusion-lista foi DERROTADO!</strong><br><br>Conseguimos! O Ilusion-lista deixa sair um grito final enquanto se contorce no ar, soltando penas como chuva. Devagar e gradualmente, ele se transforma em uma nuvem de névoa. Enquanto o recente Sol começa a se revelar, furando o nevoeiro, ele se dissipa revelando as silhuetas de Bailey, Matt, Alex... e o próprio Primeiro de Abril.<br><br><strong>Mistiflying está salva!</strong><br><br>O Primeiro de Abril tem um ar envergonhado. \"Ah, hm,\" diz ele. \"Talvez eu tenha... me entusiasmado um pouco.\"<br><br>A multidão murmura. Flores ensopadas enchem os passeios. Em algum lugar, um telhado cai, fazendo soar o som de água.<br><br>\"É, bem...\" diz o Primeiro de Abril, \"Enfim. O que quero dizer é, me desculpem\". Ele solta um suspiro. \"Parece que nem tudo pode ser só diversão e jogos, afinal. Não machuca termos foco de vez em quando. Acho que vou começar a preparar a travessura do próximo ano.\"<br><br>Redphoenix tosse de forma ameaçadora.<br><br>\"Quero dizer, começar a limpeza de primavera deste ano!\" diz o Primeiro de Abril. \"Nada a temer! Vou deixar a Cidade dos Hábitos toda arrumada em pouco tempo. Felizmente ninguém é melhor que eu em usar dois esfregões ao mesmo tempo.\"<br><br>Motivada, a banda de cerimônias começa a tocar.<br><br>Não demora muito até que tudo esteja de volta ao normal na Cidade dos Hábitos. Mais - agora que o Ilusion-lista evaporou, as abelhas mágicas de Mistiflying voltaram ao trabalho e em pouco tempo as flores voltam a brotar e a cidade está flutuando novamente.<br><br>Enquanto os Habiticanos fazem carinho nas abelhas mágicas, os olhos do Primeiro de Abril se iluminam. \"Oho! Tive uma ideia! Porque não mantemos algumas destas Abelhas como mascotes e montarias? É uma recompensa que representa perfeitamente o equilíbrio entre trabalho árduo e doces recompensas, se for para ser todo metafórico e bobo.\" Ele pisca o olho. \"Além disso, elas não têm ferrões! Palavra de Palhaço.\"",
"questBewilderCompletionChat": "`O Ilusion-lista foi DERROTADO!`\n\nConseguimos! O Ilusion-lista deixa sair um grito final enquanto se contorce no ar, soltando penas como chuva. Devagar e gradualmente, ele se transforma em uma nuvem de névoa. Enquanto o recente Sol começa a se revelar, furando o nevoeiro, ele se dissipa revelando as silhuetas de Bailey, Matt, Alex... e o próprio Primeiro de Abril.\n\n`Mistiflying está salva!`\n\nO Primeiro de Abril tem um ar envergonhado. \"Ah, hm,\" diz ele. \"Talvez eu tenha... me entusiasmado um pouco.\"\n\nA multidão murmura. Flores ensopadas enchem os passeios. Em algum lugar, um telhado cai, fazendo soar o som de água.\n\n\"É, bem...\" diz o Primeiro de Abril, \"Enfim. O que quero dizer é, me desculpem\". Ele solta um suspiro. \"Parece que nem tudo pode ser só diversão e jogos, afinal. Não machuca termos foco de vez em quando. Acho que vou começar a preparar a travessura do próximo ano.\"\n\nRedphoenix tosse de forma ameaçadora.\n\n\"Quero dizer, começar a limpeza de primavera deste ano!\" diz o Primeiro de Abril. \"Nada a temer! Vou deixar a Cidade dos Hábitos toda arrumada em pouco tempo. Felizmente ninguém é melhor que eu em usar dois esfregões ao mesmo tempo.\"\n\nMotivada, a banda de cerimônias começa a tocar.\n\nNão demora muito até que tudo esteja de volta ao normal na Cidade dos Hábitos. Mais - agora que o Ilusion-lista evaporou, as abelhas mágicas de Mistiflying voltaram ao trabalho e em pouco tempo as flores voltam a brotar e a cidade está flutuando novamente.\n\nEnquanto os Habiticanos fazem carinho nas abelhas mágicas, os olhos do Primeiro de Abril se iluminam. \"Oho! Tive uma ideia! Porque não mantemos algumas destas Abelhas como mascotes e montarias? É uma recompensa que representa perfeitamente o equilíbrio entre trabalho árduo e doces recompensas, se for para ser todo metafórico e bobo.\" Ele pisca o olho. \"Além disso, elas não têm ferrões! Palavra de Palhaço.\"",
"questBewilderCompletion": "<strong>O Ilusion-lista foi DERROTADO!</strong><br><br>Conseguimos! O Ilusion-lista deixa sair um grito final enquanto se contorce no ar, soltando penas como chuva. Devagar e gradualmente, ele se transforma em uma nuvem de névoa. Enquanto o recente Sol começa a se revelar, furando o nevoeiro, ele se dissipa revelando as silhuetas de Bailey, Matt, Alex... e o próprio Piadista.<br><br><strong>Borbópolis está salva!</strong><br><br>O Piadista tem um ar envergonhado. \"Ah, hm,\" diz ele. \"Talvez eu tenha... me entusiasmado um pouco.\"<br><br>A multidão murmura. Flores ensopadas enchem os passeios. Em algum lugar, um telhado cai, fazendo soar o som de água.<br><br>\"É, bem...\" diz o Piadista, \"Enfim. O que quero dizer é, me desculpem\". Ele solta um suspiro. \"Parece que nem tudo pode ser só diversão e jogos, afinal. Não machuca termos foco de vez em quando. Acho que vou começar a preparar a travessura do próximo ano.\"<br><br>Redphoenix tosse de forma ameaçadora.<br><br>\"Quero dizer, começar a limpeza de primavera deste ano!\" diz o Piadista. \"Nada a temer! Vou deixar a Cidade dos Hábitos toda arrumada em pouco tempo. Felizmente ninguém é melhor que eu em usar dois esfregões ao mesmo tempo.\"<br><br>Motivada, a banda de cerimônias começa a tocar.<br><br>Não demora muito até que tudo esteja de volta ao normal na Cidade dos Hábitos. Mais - agora que o Ilusion-lista evaporou, as abelhas mágicas de Borbópolis voltaram ao trabalho e em pouco tempo as flores voltam a brotar e a cidade está flutuando novamente.<br><br>Enquanto os Habiticanos fazem carinho nas abelhas mágicas, os olhos do Piadista se iluminam. \"Oho! Tive uma ideia! Porque não mantemos algumas destas Abelhas como mascotes e montarias? É uma recompensa que representa perfeitamente o equilíbrio entre trabalho árduo e doces recompensas, se for para ser todo metafórico e bobo.\" Ele pisca o olho. \"Além disso, elas não têm ferrões! Palavra de Palhaço.\"",
"questBewilderCompletionChat": "`O Ilusion-lista foi DERROTADO!`\n\nConseguimos! O Ilusion-lista deixa sair um grito final enquanto se contorce no ar, soltando penas como chuva. Devagar e gradualmente, ele se transforma em uma nuvem de névoa. Enquanto o recente Sol começa a se revelar, furando o nevoeiro, ele se dissipa revelando as silhuetas de Bailey, Matt, Alex... e o próprio Piadista.\n\n`Borbópolis está salva!`\n\nO Piadista tem um ar envergonhado. \"Ah, hm,\" diz ele. \"Talvez eu tenha... me entusiasmado um pouco.\"\n\nA multidão murmura. Flores ensopadas enchem os passeios. Em algum lugar, um telhado cai, fazendo soar o som de água.\n\n\"É, bem...\" diz o Piadista, \"Enfim. O que quero dizer é, me desculpem\". Ele solta um suspiro. \"Parece que nem tudo pode ser só diversão e jogos, afinal. Não machuca termos foco de vez em quando. Acho que vou começar a preparar a travessura do próximo ano.\"\n\nRedphoenix tosse de forma ameaçadora.\n\n\"Quero dizer, começar a limpeza de primavera deste ano!\" diz o Piadista. \"Nada a temer! Vou deixar a Cidade dos Hábitos toda arrumada em pouco tempo. Felizmente ninguém é melhor que eu em usar dois esfregões ao mesmo tempo.\"\n\nMotivada, a banda de cerimônias começa a tocar.\n\nNão demora muito até que tudo esteja de volta ao normal na Cidade dos Hábitos. Mais - agora que o Ilusion-lista evaporou, as abelhas mágicas de Borbópolis voltaram ao trabalho e em pouco tempo as flores voltam a brotar e a cidade está flutuando novamente.\n\nEnquanto os Habiticanos fazem carinho nas abelhas mágicas, os olhos do Piadista se iluminam. \"Oho! Tive uma ideia! Porque não mantemos algumas destas Abelhas como mascotes e montarias? É uma recompensa que representa perfeitamente o equilíbrio entre trabalho árduo e doces recompensas, se for para ser todo metafórico e bobo.\" Ele pisca o olho. \"Além disso, elas não têm ferrões! Palavra de Palhaço.\"",
"questBewilderBossRageTitle": "Ataque de Decepção",
"questBewilderBossRageDescription": "Quando essa barra encher, o Ilusion-lista vai lançar o seu Ataque de Decepção sobre Habitica!",
"questBewilderDropBumblebeePet": "Abelha Mágica (Mascote)",
@@ -442,7 +442,7 @@
"questStoikalmCalamity1DropDesertPotion": "Poção de Eclosão Deserto",
"questStoikalmCalamity1DropArmor": "Armadura do Cavaleiro de Mamute",
"questStoikalmCalamity2Text": "Calamidade em Stoïkalm, Parte 2: Procure as Cavernas Gélidas",
"questStoikalmCalamity2Notes": "O salão majestoso dos Cavaleiros de Mamute é uma obra-prima incrível de arquitetura, mas também está inteiramente vazia. Não há móveis, não há armas e até as colunas estão sem suas decorações.<br><br>\"Aqueles crânios limparam este lugar,\" Lady Glaciata diz lançando um hálito de nevasca. \"Humilhante. Nenhuma alma deve mencionar isso ao Primeiro de Abril, ou eu nunca vou parar de ouvir sobre isso.\"<br><br>\"Que misterioso!\" diz @Beffymaroo. \"Mas onde eles--\"<br><br>\"As caverna do dragão de gelo.\" Lady Glaciata gesticula para brilhantes moedas jogadas na neve lá fora. \"Descuidado.\"<br><br>\"Mas não são dragões de gelo criaturas que respeitam seu próprio tesouro?\" @Beffymaroo pergunta. \"Por que eles possivelmente--\"<br><br>\"Controle da mente,\" diz Lady Glaciata, completamente sem foco. \"Ou algo igualmente melodramático e inconveniente.\" Ela começa a andar no corredor. \"Por que você está aí parado?\"<br><br>Rápido, vá seguir a trilha das Moedas de Gelo!",
"questStoikalmCalamity2Notes": "O salão majestoso dos Cavaleiros de Mamute é uma obra-prima incrível de arquitetura, mas também está inteiramente vazia. Não há móveis, não há armas e até as colunas estão sem suas decorações.<br><br>\"Aqueles crânios limparam este lugar,\" Lady Glaciata diz lançando um hálito de nevasca. \"Humilhante. Nenhuma alma deve mencionar isso ao Piadista, ou eu nunca vou parar de ouvir sobre isso.\"<br><br>\"Que misterioso!\" diz @Beffymaroo. \"Mas onde eles--\"<br><br>\"As caverna do dragão de gelo.\" Lady Glaciata gesticula para brilhantes moedas jogadas na neve lá fora. \"Descuidado.\"<br><br>\"Mas não são dragões de gelo criaturas que respeitam seu próprio tesouro?\" @Beffymaroo pergunta. \"Por que eles possivelmente--\"<br><br>\"Controle da mente,\" diz Lady Glaciata, completamente sem foco. \"Ou algo igualmente melodramático e inconveniente.\" Ela começa a andar no corredor. \"Por que você está aí parado?\"<br><br>Rápido, vá seguir a trilha das Moedas de Gelo!",
"questStoikalmCalamity2Completion": "As Moedas de Gelo te levam diretamente a uma entrada enterrada de uma caverna muito bem escondida. Apesar do clima do lado de for ser calmo e amável, com a luz do sol esparramada pela neve, dentro da caverna há um grande barulho, perfurante como o gélido vento. Lady Glaciata te entrega um Elmo do Cavaleiro de Mamute. \"Use isto,\" ela diz. \"Você vai precisar.\"",
"questStoikalmCalamity2CollectIcicleCoins": "Moedas de Gelo",
"questStoikalmCalamity2DropHeadgear": "Elmo do Cavaleiro de Mamute (Cabeça)",
@@ -473,25 +473,25 @@
"questButterflyUnlockText": "Desbloqueia Ovos de Lagarto para compra no Mercado",
"questGroupMayhemMistiflying": "Loucura em Borbópolis",
"questMayhemMistiflying1Text": "Loucura em Borbópolis, Parte 1: Borbomágica Experimenta um Terrível Destino",
"questMayhemMistiflying1Notes": "Apesar dos adivinhos locais terem prevido um bom clima, a tarde está com ventos fortíssimos, então você devagar segue seu amigo @Kiwibot até sua casa para escapar deste dia de ventos fortes. <br><br>Nenhum dos dois espera encontrar o Primeiro de Abril relaxando na mesa da cozinha.<br><br>\"Ahh, olá\", ele diz. \"Que bom encontrar vocês aqui. Por favor, me deixe te oferecer um pouco deste delicioso chã.\"<br><br>\"Esse...\", @Kiwibot começa. \"Esse é MEU---\"<br><br>\"Sim, sim, claro,\" diz o Primeiro de Abril, enquanto pega uns biscoitos. \"Só pensei que eu poderia entrar aqui e me livrar um pouco de todas as caveiras conjuradoras de tornados.\" Ele beberica um pouco seu chá. \"Incidentalmente, a cidade de Borbópolis está sendo atacada.\"<br><br>Horrorizado, você e seus amigos correm para os Estábulos e selam sua mais rápida montaria voadora. Enquanto vocês planam acima da cidade flutuante, vocês veem que um conjunto barulhento de caveiras voadoras está de olho na cidade... e muitas percebem e se viram na sua direção!",
"questMayhemMistiflying1Completion": "A última caveira cai do céu, com um brilhante conjunto de roupas de arco-íris preso em sua mandíbula, mas a ventania não diminuiu. Algo mais está agindo aqui. E onde está o preguiçoso Primeiro de Abril? Você pega as roupas e entra na cidade.",
"questMayhemMistiflying1Notes": "Apesar dos adivinhos locais terem prevido um bom clima, a tarde está com ventos fortíssimos, então você devagar segue seu amigo @Kiwibot até sua casa para escapar deste dia de ventos fortes. <br><br>Nenhum dos dois espera encontrar o Piadista relaxando na mesa da cozinha.<br><br>\"Ahh, olá\", ele diz. \"Que bom encontrar vocês aqui. Por favor, me deixe te oferecer um pouco deste delicioso chá.\"<br><br>\"Esse...\", @Kiwibot começa. \"Esse é MEU---\"<br><br>\"Sim, sim, claro,\" diz o Piadista, enquanto pega uns biscoitos. \"Só pensei que eu poderia entrar aqui e me livrar um pouco de todas as caveiras conjuradoras de tornados.\" Ele beberica um pouco seu chá. \"Incidentalmente, a cidade de Borbópolis está sendo atacada.\"<br><br>Horrorizado, você e seus amigos correm para os Estábulos e selam sua mais rápida montaria voadora. Enquanto vocês planam acima da cidade flutuante, vocês veem que um conjunto barulhento de caveiras voadoras está de olho na cidade... e muitas percebem e se viram na sua direção!",
"questMayhemMistiflying1Completion": "A última caveira cai do céu, com um brilhante conjunto de roupas de arco-íris preso em sua mandíbula, mas a ventania não diminuiu. Algo mais está agindo aqui. E onde está o preguiçoso Piadista? Você pega as roupas e entra na cidade.",
"questMayhemMistiflying1Boss": "Enxame de Caveiras Voadoras",
"questMayhemMistiflying1RageTitle": "Retorno do Enxame",
"questMayhemMistiflying1RageDescription": "Retorno do Enxame: Esta barra enche quando você não completa suas Diárias. Quando ela estiver cheia, o Enxame de Crânios vai curar 30% de sua vida restante!",
"questMayhemMistiflying1RageDescription": "Retorno do Enxame: Esta barra enche quando você não completa suas Diárias. Quando ela estiver cheia, o Enxame de Caveiras Voadoras vai curar 30% de sua vida restante!",
"questMayhemMistiflying1RageEffect": "`Enxame de Caveiras de Fogo usa RETORNO DO ENXAME!`\n\nEncorajado pelas suas vitórias, mais crânios giram ao seu redor numa espiral de fogo!",
"questMayhemMistiflying1DropSkeletonPotion": "Poção de Eclosão Esqueleto",
"questMayhemMistiflying1DropWhitePotion": "Poção de Eclosão Branca",
"questMayhemMistiflying1DropArmor": "Túnica do Mensageiro Arco-Íris Malandro (Armadura)",
"questMayhemMistiflying2Text": "Loucura em Borbópolis, Parte 2: E o Vento Piora",
"questMayhemMistiflying2Notes": "Borbópolis começa a trepidar enquanto as abelhas mágicas que a mantém flutuando são golpeadas pelo vendaval. Depois de uma busca desenfreada pelo Primeiro de Abril, vocês o encontram numa cabana, alegremente jogando cartas com uma caveira amarrada e com raiva. <br><br>@Katy133 levanta a voz através do assobiante vento. \"O que está causando isto? Nós derrotamos as caveiras, mas isto está piorando!\"<br><br>\"Esse é o problema,\" o Primeiro de Abril concordo. \"Por favor seja uma dama e não comente com a Lady Glaucial. Ela sempre fica reclamando e querendo acabar nossa relação por eu seu \"catastroficamente irresponsável\" e eu tenho medo que ela possa entender mal essa situação.\" Ele embaralha as cartas. \"Talvez você possa seguir as Borbomágicas? Elas são imateriais, então o vento não pode jogar elas pra longe. Além disso, elas costumam se concentrar próximo de ameaças.\" Ele mostra a janela onde várias das criaturas patronas da cidade estão flutuando em direção leste. \"Agora me deixe concentrar... meu oponente não está com uma cara boa.\"",
"questMayhemMistiflying2Completion": "Você segue as Borbomágicas para o lugar do tornado, onde está muito forte para você continuar. <br><br>\"Isso deve ajudar,\" diz uma voz diretamente no seu ouvido, tanto que você quase cai da sua montaria. O Primeiro de Abril está, de alguma forma, sentado bem ao seu lado na sela da montaria. \"Eu ouvi que aqueles capuz de mensageiros emitem uma aura que protege contra maus climas -- bem útil para não perder cartas enquanto se voa por aí. Talvez você possa tentar?\"",
"questMayhemMistiflying2Notes": "Borbópolis começa a trepidar enquanto as abelhas mágicas que a mantém flutuando são golpeadas pelo vendaval. Depois de uma busca desenfreada pelo Piadista, vocês o encontram numa cabana, alegremente jogando cartas com uma caveira amarrada e com raiva. <br><br>@Katy133 levanta a voz através do assobiante vento. \"O que está causando isto? Nós derrotamos as caveiras, mas isto está piorando!\"<br><br>\"Esse é o problema,\" o Piadista concorda. \"Por favor seja uma dama e não comente com a Lady Glaucial. Ela sempre fica reclamando e querendo acabar nossa relação por eu seu \"catastroficamente irresponsável\" e eu tenho medo que ela possa entender mal essa situação.\" Ele embaralha as cartas. \"Talvez você possa seguir as Borbomágicas? Elas são imateriais, então o vento não pode jogar elas pra longe. Além disso, elas costumam se concentrar próximo de ameaças.\" Ele mostra a janela onde várias das criaturas patronas da cidade estão flutuando em direção leste. \"Agora me deixe concentrar... meu oponente não está com uma cara boa.\"",
"questMayhemMistiflying2Completion": "Você segue as Borbomágicas para o lugar do tornado, onde está muito forte para você continuar. <br><br>\"Isso deve ajudar,\" diz uma voz diretamente no seu ouvido, tanto que você quase cai da sua montaria. O Piadista está, de alguma forma, sentado bem ao seu lado na sela da montaria. \"Eu ouvi que aqueles capuz de mensageiros emitem uma aura que protege contra maus climas -- bem útil para não perder cartas enquanto se voa por aí. Talvez você possa tentar?\"",
"questMayhemMistiflying2CollectRedMistiflies": "Borbomágica Vermelha",
"questMayhemMistiflying2CollectBlueMistiflies": "Borbomágica Azul",
"questMayhemMistiflying2CollectGreenMistiflies": "Borbomágica Verde",
"questMayhemMistiflying2DropHeadgear": "Capuz do Mensageiro Arco-Íris Malandro (Cabeça)",
"questMayhemMistiflying3Text": "Loucura em Borbópolis, Parte 3: o Carteiro que é Extremamente Rude",
"questMayhemMistiflying3Text": "Loucura em Borbópolis, Parte 3: O Carteiro que é Extremamente Rude",
"questMayhemMistiflying3Notes": "As Borbomágicas estão girando tão rápido no tornado que é difícil vê-las. Olhando atentamente, você vê uma silhueta de algo com várias asas voando no centro da imensa tempestade. <br>\"Ai ai ai\", o Primeiro de Abril suspira, quase não se ouve por culpa do barulho da tempestade. \"Parece que Winny, de alguma forma, foi possuído. Problema bem comum, isso daí. Pode acontecer com qualquer um.\"<br><br>\"O Manipulador do Vento!\" @Beffymaroo grita para você. \"Ele é o mensageiro-mago mais talentoso de Borbópolis, exatamente por ser tão bom com magias do clima. Normalmente, ele é um mensageiro bem educado!\"<br><br>Como se quisesse desmentir essa última frase, o Manipulador do Vento lança um grito de fúria e mesmo com seu manto mágico, a tempestade quase te derruba de sua montaria.<br><br>\"Essa máscara toda cheguei é nova,\" o Primeiro de Abril nota. \"Talvez você devesse livrar ele da máscara?\"<br><br>É uma boa ideia... mas o mago em fúria não vai desistir sem uma boa briga.",
"questMayhemMistiflying3Completion": "Logo quando você acreditava que não poderia aguentar o vento nenhum pouco mais, você consegue se esgueirar e arrancar a máscara do Manipulador do Vento. Instantaneamente, o tornado desaparece, deixando apenas uma reparadora briza com o brilho do sol. O Manipular do Vento olha ao redor aliviado. \"Onde ela foi?\"<br><br>\"Quem\", seu amigo @khdarkwolf pergunta. <br><br>\"Aquela doce mulher que se ofereceu para entregar um pacote por mim. Tzina.\" Ao notar a cidade que fora atacada pelo vento, sua expressão cai. \"Então, talvez ela não fosse tão doce...\"<br><br>O Primeiro de Abril o consola e entrega dois envelopes brilhantes. \"Aqui, por que você não deixa esse cansado amigo descansar e toma conta das cartas um pouco? Eu ouvi que a mágica nesses envelopes farão valer à pena seu tempo.\"",
"questMayhemMistiflying3Completion": "Logo quando você acreditava que não poderia aguentar o vento nenhum pouco mais, você consegue se esgueirar e arrancar a máscara do Manipulador do Vento. Instantaneamente, o tornado desaparece, deixando apenas uma reparadora briza com o brilho do sol. O Manipular do Vento olha ao redor aliviado. \"Onde ela foi?\"<br><br>\"Quem?\", seu amigo @khdarkwolf pergunta. <br><br>\"Aquela doce mulher que se ofereceu para entregar um pacote por mim. Tzina.\" Ao notar a cidade que fora atacada pelo vento, sua expressão cai. \"Então, talvez ela não fosse tão doce...\"<br><br>O Piadista o consola e entrega dois envelopes brilhantes. \"Aqui, por que você não deixa esse cansado amigo descansar e toma conta das cartas um pouco? Eu ouvi que a mágica nesses envelopes farão valer à pena seu tempo.\"",
"questMayhemMistiflying3Boss": "O Manipulador do Vento",
"questMayhemMistiflying3DropPinkCottonCandy": "Algodão-Doce Rosa (Comida)",
"questMayhemMistiflying3DropShield": "Mensagem do Arco-Íris Gatuno (Mão Secundária)",
@@ -519,7 +519,7 @@
"questGroupLostMasterclasser": "Mistério dos Mestres de Classe",
"questUnlockLostMasterclasser": "Para desbloquear essa missão, complete as missões finais dessa cadeia de missões: 'Angústia de Lentópolis', 'Loucura em Borbópolis', 'Calamidade de Stoïkalm' e 'Horror em Matarefa'.",
"questLostMasterclasser1Text": "O Mistério dos Mestres de Classe, Parte 1: Leia as Entrelinhas",
"questLostMasterclasser1Notes": "Inesperadamente, você é convocado por @beffymaroo e @Lemoness ao Salão do Hábito, onde fica atônito ao encontrar os quatro Mestres de Classe esperando por você sob a pálida luz da alvorada. Até mesmo a Ceifadora Alegre parece sombria.<br><br>\"Oh, você está aqui,\" diz Primeiro de Abril. \"Não tiraríamos você de seu descanso sem um motivo terrível—\"<br><br>\"Ajude-nos a investigar o recente ataque de possessões,' interrompe Lady Glaciata. \"Todas as vítimas culpam uma pessoa chamada Tzina.\"<br><br>Primeiro de Abril fica claramente ofendido com a interrupção. \"E quanto ao meu discurso?\" ele chia com ela. \"Com o nevoeiro e as trovoadas?\"<br><br>\"Temos pressa\", ela murmura de volta. \"E meus mamutes ainda estão encharcados por causa de sua prática incessante.\"<br><br>\"Receio que a estimada Mestre dos Guerreiros está certa,\" diz o Rei Manta. \"Tempo é essencial. Você nos ajudará?\"<br><br>Quando você concorda, ele agita sua varinha e abre um portal, revelando uma sala subaquática. \"Nade comigo até Dilatória e buscaremos em minha biblioteca por qualquer referência que nos dê uma pista.\" Ao perceber sua confusão, diz \"Não se preocupe. O papel foi encantado muito antes de Dilatória afundar. Nenhum dos livros está nem perto de estar molhado!\" Ele pisca. \"Diferente dos mamutes de Lady Glaciata.\"<br><br>\"Eu escutei isso, Manta.\"<br><br>Ao mergulhar na água após o Mestre dos Magos, suas pernas magicamente se transformam em nadadeiras. Embora seu corpo esteja flutuando, seu coração afunda ao ver as milhares de prateleiras. É melhor começar a leitura…",
"questLostMasterclasser1Notes": "Inesperadamente, você é convocado por @beffymaroo e @Lemoness ao Salão do Hábito, onde fica atônito ao encontrar os quatro Mestres de Classe esperando por você sob a pálida luz da alvorada. Até mesmo a Ceifadora Alegre parece sombria.<br><br>\"Oh, você está aqui,\" diz Piadista. \"Não tiraríamos você de seu descanso sem um motivo terrível—\"<br><br>\"Ajude-nos a investigar o recente ataque de possessões\", interrompe Lady Glaciata. \"Todas as vítimas culpam uma pessoa chamada Tzina.\"<br><br>Piadista fica claramente ofendido com a interrupção. \"E quanto ao meu discurso?\" ele chia com ela. \"Com o nevoeiro e as trovoadas?\"<br><br>\"Temos pressa\", ela murmura de volta. \"E meus mamutes ainda estão encharcados por causa de sua prática incessante.\"<br><br>\"Receio que a estimada Mestre dos Guerreiros está certa,\" diz o Rei Manta. \"Tempo é essencial. Você nos ajudará?\"<br><br>Quando você concorda, ele agita sua varinha e abre um portal, revelando uma sala subaquática. \"Nade comigo até Dilatória e buscaremos em minha biblioteca por qualquer referência que nos dê uma pista.\" Ao perceber sua confusão, diz \"Não se preocupe. O papel foi encantado muito antes de Dilatória afundar. Nenhum dos livros está nem perto de estar molhado!\" Ele pisca. \"Diferente dos mamutes de Lady Glaciata.\"<br><br>\"Eu escutei isso, Manta.\"<br><br>Ao mergulhar na água após o Mestre dos Magos, suas pernas magicamente se transformam em nadadeiras. Embora seu corpo esteja flutuando, seu coração afunda ao ver as milhares de prateleiras. É melhor começar a leitura…",
"questLostMasterclasser1Completion": "Após horas de busca nos volumes, você ainda não encontrou nenhuma informação útil.<br><br>\"É impossível que não exista nenhuma mísera referência a qualquer coisa relevante,\" diz a bibliotecária \"@Tuqjoi e seu assistente @stefalupagus concorda frustrado.<br><br>Os olhos de Rei Manta se estreitam. \"Impossível não...\" ele diz. \"<em>Intencional</em>.\" Por um instante a água brilha em volta de suas mãos e vários livros se arrepiam. \"Alguma coisa está obscurecendo a informação,\" ele diz. \"Não apenas um feitiço simples, mas algo com vontade própria. Algo... vivo.\" Ele nada para fora da mesa. \"A Ceifadora Alegre precisa saber disso. Vamos preparar algo para comer na estrada.\"",
"questLostMasterclasser1CollectAncientTomes": "Tomos Antigos",
"questLostMasterclasser1CollectForbiddenTomes": "Tomos Proibidos",
@@ -531,7 +531,7 @@
"questLostMasterclasser2DropEyewear": "Máscara Etérea (Acessório de Olhos)",
"questLostMasterclasser3Text": "O Mistério dos Mestres de Classe, Parte 3: Cidade nas Areias",
"questLostMasterclasser3Notes": "Assim que a noite cai sobre as areias incandescentes de Tempo Perdido, seus guias @AnndeLuna, @KiwiBot e @Katy133 lhe levam a frente. Pilares alvejantes atravessam as dunas sombrias e, ao se aproximarem, um som arrepiante ecoa o ambiente que antes parecia abandonado. <br><br>\" Criaturas invisíveis!\" diz Primeiro de Abril claramente ambicioso \"Hehehe! Só imaginem as possibilidades. Este deve de ser um trabalho de um Gatuno realmente furtivo\"<br><br>\" Um Gatuno que pode estar nos vigiando\", fala Lady Glaciata desmontando de seu corcel e brandindo sua lança. \" Se eles estão prontos para atacar, tentem não irritar-los . Eu não quero outro incidente como o dos vulcões.\"<br><br> Ele então retruca \" Mas aquele foi com certeza um dos resgastes mais esplendidos\"<br><br> Para sua surpresa, Lady Glaciata cora com o elogio e dá um passo afobado para trás, como que para examinar as ruínas. <br><br> \"Parecem os destroços de uma antiga cidade\" diz @AnnDeLune. \"Eu só imagino o que será...\"<br><br> Antes que ela pudesse terminar sua fala, um portal emerge dos céus. Magia não deveria ser praticamente impossível aqui?! Você ouve o trote brusco dos animais invisíveis ao fugirem em pânico, e prontamente se põe em guarda para mais uma vez lutar contra uivantes caveiras que transbordam dos céus prontas para um massacre.",
"questLostMasterclasser3Completion": "Primeiro de Abril surpreende a ultima caveira com um spray de areia, e ela recua até Lady Glaciata, que a destrói com destreza. Bom respire fundo e de uma olhada, você vê a silhueta de alguém movendo por um único instante no outro lado do portal que está se fechando. Quase como reflexo, você estende a mão para o baú dos itens previamente conquistados e se agarra ao amuleto, e com determinação, vai em direção da pessoa invisível. Ignorando os gritos de aviso de Lady Glaciata e Primeiro de Abril, você salta pelo portal instantes antes dele fechar, sendo submerso em um pegajoso vazio.",
"questLostMasterclasser3Completion": "Piadista surpreende a última caveira com um spray de areia, e ela recua até Lady Glaciata, que a destrói com destreza. Bom, respire fundo e de uma olhada, você vê a silhueta de alguém movendo por um único instante no outro lado do portal que está se fechando. Quase como reflexo, você estende a mão para o baú dos itens previamente conquistados e se agarra ao amuleto, e com determinação, vai em direção da pessoa invisível. Ignorando os gritos de aviso de Lady Glaciata e Piadista, você salta pelo portal instantes antes dele fechar, sendo submerso em um pegajoso vazio.",
"questLostMasterclasser3Boss": "Enxame de Caveiras do Vácuo",
"questLostMasterclasser3RageTitle": "Retorno do Enxame",
"questLostMasterclasser3RageDescription": "Retorno do Enxame: Esta barra enche quando você não completa suas Diárias. Quando fica cheia, o Enxame de Caveiras de Vácuo irá curar 30% de sua vida!",
@@ -544,7 +544,7 @@
"questLostMasterclasser3DropZombiePotion": "Poção de Eclosão Zumbi",
"questLostMasterclasser4Text": "O Mistério dos Mestres de Classe, Parte 4: A Mestra Desaparecida",
"questLostMasterclasser4Notes": "Você emerge do portal, ainda suspenso em um estranho, e instável, submundo “Aquilo foi ousado,” diz uma voz fria. “Eu devo admitir, ainda não havia planejado uma batalha direta” Uma mulher ascende do redemoinho revolto em trevas. “Bem-vindo(a) ao reino do vácuo.”<br><br>Você tenta lutar contra uma sensação nauseante enquanto pergunta \"Você é a Zinnya?” <br><br>“Este é um velho nome para uma jovem idealista” ela diz com a boca contorcendo enquanto o mundo distorce sobre seus pés “Não! Se realmente precisa de um nome, deve me chamar como a Antizinnya agora, depois de tudo que eu fiz e desfiz.”<br><br>De repente, o portal reabre atrás de você e dele saltam todos os quatro mestres de classes, correndo em sua direção. Os olhos da Antizinnyas estão preenchidos de ódio ao olhar essa cena. “Vejo que meus patéticos substitutos conseguiram chegar até você”<br><br>Você não acredita. “Substitutos?”<br><br>“Como mestre dobradora do ether, eu fui a primeira mestre de classe - a única mestre de classe. Esses quatro são patéticos, cada um possuindo apenas um fragmento do que um dia eu tive! Eu comandei cada magia, eu aprendi todas as habilidades. Eu quem criei o seu mundo pela minha vontade - até que o traiçoeiro ether se colapsou sobre o peso dos meus talentos e das minhas expectativas perfeitamente razoáveis. Depois, eu estive aprisionada por milênios nesse vácuo resultante, me recuperando. Imagina meu desgosto quando descobri o quanto meu legado foi corrompido. Ela deixa escapar uma fina, ecoante risada. “Meu plano era demolir seus domínios antes de destruir cada um de vocês, mas suponho que a ordem dos fatores é irrelevante” Com uma explosão de força desenfreada ela dispara em sua direção, e o Reino do Vácuo explode em caos.",
"questLostMasterclasser4Completion": "Durante a investida de seu último ataque, A Mestra Desaparecida grita com frustração, e o corpo dela oscila em translucidez. O vazio começa envolve-la enquanto ela cai para frente, e por um momento, você enxerga ela se transformar, se tornando mais jovem, calma, e com uma expressão de paz em seu rosto... mas acaba com tudo esvaindo-se como apenas um sussurro, e você se encontra mais uma vez de joelhos no meio do deserto.<br><br>\"Parece que nós temos muito o que aprender sobre nossa história,\" diz o Rei Manta, olhando para as ruínas. \"Depois da Mestra Dobradora de Ether ter crescido sobrecarregada e perder o controle sob suas habilidades, o vazio derramado levou toda a vida desta terra. Provavelmente tudo o que se conhece poderia se tornar um deserto como este\"<br><br> \"Não é de se espantar que os antigos fundadores de Habitica sempre insistiam no equilíbrio da produtividade e do bem estar,\" murmura a Ceifadora Alegre. \"Reconstruir o mundo deles deve ter sido uma tarefa assustadora de um longo e árduo trabalho., mas eles deveriam querer prevenir que tal catástrofe acontecesse novamente\".<br><br>\"Uau, olhe aqueles itens primitivos!\" diz Primeiro de Abril. Com certeza, que todos eles brilho com a pálido e translúcida cintilação vinda da explosão final de ether que ocorreu quando você colocou o espirito de Antizinnyas para dormir. \"Que efeito deslumbrante. Eu devo fazer anotações\"<br><br> \"Provavelmente o restos concentrados de ether nessa área, também tornaram os animais invisíveis\" diz Lady Glaciata, ao coçar a cabeça de uma silhueta vazia atrás das orelhas. Você sente uma cabeça fofa e invisível tocar a palma de sua mão e suspeita que terá que dar explicações aos Estábulos quando voltar para casa. Ao olhar as ruínas umas última vez, você vê o que sobrou da primeira Mestra de Classes: sua capa brilhante. Colocando-a em seus ombros, você volta para cidade do Hábito, pensando sobre tudo que aprendeu.<br><br>",
"questLostMasterclasser4Completion": "Durante a investida de seu último ataque, A Mestra Desaparecida grita com frustração, e o corpo dela oscila em translucidez. O vazio começa envolve-la enquanto ela cai para frente, e por um momento, você enxerga ela se transformar, se tornando mais jovem, calma, e com uma expressão de paz em seu rosto... mas acaba com tudo esvaindo-se como apenas um sussurro, e você se encontra mais uma vez de joelhos no meio do deserto.<br><br>\"Parece que nós temos muito o que aprender sobre nossa história,\" diz o Rei Manta, olhando para as ruínas. \"Depois da Mestra Dobradora de Ether ter crescido sobrecarregada e perder o controle sob suas habilidades, o vazio derramado levou toda a vida desta terra. Provavelmente tudo o que se conhece poderia se tornar um deserto como este\"<br><br> \"Não é de se espantar que os antigos fundadores de Habitica sempre insistiam no equilíbrio da produtividade e do bem estar,\" murmura a Ceifadora Alegre. \"Reconstruir o mundo deles deve ter sido uma tarefa assustadora de um longo e árduo trabalho, mas eles deveriam querer prevenir que tal catástrofe acontecesse novamente\".<br><br>\"Uau, olhe aqueles itens primitivos!\" diz Piadista. Com certeza, todos eles brilham com a pálido e translúcida cintilação vinda da explosão final de ether que ocorreu quando você colocou o espírito de Antizinnyas para dormir. \"Que efeito deslumbrante. Eu devo fazer anotações\"<br><br> \"Provavelmente o restos concentrados de ether nessa área, também tornaram os animais invisíveis\" diz Lady Glaciata, ao coçar a cabeça de uma silhueta vazia atrás das orelhas. Você sente uma cabeça fofa e invisível tocar a palma de sua mão e suspeita que terá que dar explicações aos Estábulos quando voltar para casa. Ao olhar as ruínas uma última vez, você vê o que sobrou da primeira Mestra de Classes: sua capa brilhante. Colocando-a em seus ombros, você volta para cidade do Hábito, pensando sobre tudo que aprendeu.<br><br>",
"questLostMasterclasser4Boss": "Anti'zinnya",
"questLostMasterclasser4RageTitle": "Vácuo Sifonante",
"questLostMasterclasser4RageDescription": "Vácuo Sifonante: Essa barra enche quando você não completa suas Diárias. Quando estiver cheia, Anti'zinnya vai remover o Mana do grupo!",
@@ -751,7 +751,7 @@
"questVirtualPetRageEffect": "`O Gotchimonstro usa Apito Irritante!` Gotchimonstro emite um bipe irritante e sua barrinha de felicidade desaparece de repente! Dano pendente reduzido.",
"questVirtualPetDropVirtualPetPotion": "Poção de Eclosão de Mascote Virtual",
"questVirtualPetBoss": "Gotchimonstro",
"questVirtualPetText": "Caos Virtual depois do Primeiro de Abril: O apitamento",
"questVirtualPetText": "Caos Virtual com o Piadista: O Apitamento",
"questVirtualPetNotes": "É uma calma e prazerosa manhã de primavera em Habitica, uma semana após um memorável Primeiro de Abril. Você e @Beffymaroo estão no estábulo cuidando de seus mascotes (que ainda estão um pouco confusos com o tempo gasto virtualmente!).<br><br>Você ouve um estrondo longínquo e um som de bipe, suave no início mas que fica cada vez mais alto, como se estivesse se aproximando. Uma forma oval aparece no horizonte e ao se aproximar, apitando cada vez mais alto, você vê que é um bichinho virtual gigantesco!<br><br>\"Ah, não!\" @Beffymaroo exclama, \"Eu acho que o Piadista deixou alguns assuntos inacabados com o grandalhão aqui, parece que ele quer atenção!\"<br><br>O mascote virtual apita nervosamente, fazendo uma birra virtual e retumbando cada vez mais perto.",
"questVirtualPetCompletion": "Alguns cuidados apertos de botões parecem ter satisfeito as misteriosas necessidades virtuais do mascote, e ele finalmente se acalmou, parecendo contente.<br><br>Repentinamente em uma explosão de confete, o Piadista aparece com uma cesta cheia de estranhas poções emitindo suaves apitos.<br><br>\"Que sincronia, hein, Piadista,\" @Beffymaroo diz com um sorriso amargo. \"Suspeito que esse camarada apitante seja um conhecido seu.\"<br><br>\"Hã, sim,\" o Piadista diz timidamente. \"Perdão por isso, e obrigado a vocês por cuidarem do Assistimon! Pegue essas poções como agradecimento, elas podem trazer de volta seus mascotes virtuais sempre que quiserem!\"<br><br>Você não está 100% certo de que simpatiza com toda a apitação, mas eles são fofos, então vale o risco!"
}
+2 -1
View File
@@ -216,5 +216,6 @@
"mysterySet202209": "Conjunto Mágico Escolar",
"mysterySet202210": "Conjunto Serpente Sinistra",
"mysteryset202211": "Conjunto Eletromante",
"mysterySet202211": "Conjunto Eletromante"
"mysterySet202211": "Conjunto Eletromante",
"mysterySet202212": "Conjunto Guardião Glacial"
}
+7 -1
View File
@@ -742,5 +742,11 @@
"backgrounds112022": "Набор 102: Выпущен в ноябре 2022",
"backgroundAmongGiantMushroomsText": "Среди гигантских грибов",
"backgroundMistyAutumnForestNotes": "Побродите по туманному осеннему лесу.",
"backgroundAmongGiantMushroomsNotes": "Восхищайтесь гигантскими грибами."
"backgroundAmongGiantMushroomsNotes": "Восхищайтесь гигантскими грибами.",
"backgrounds122022": "Набор 103: Выпущен в декабре 2022",
"backgroundBranchesOfAHolidayTreeText": "Ветви праздничной елки",
"backgroundInsideACrystalText": "Внутри кристалла",
"backgroundBranchesOfAHolidayTreeNotes": "Порезвитесь на ветвях праздничной елки.",
"backgroundSnowyVillageText": "Снежная деревня",
"backgroundSnowyVillageNotes": "Полюбуйтесь заснеженной деревней."
}
+2 -1
View File
@@ -2737,5 +2737,6 @@
"weaponArmoireMagicSpatulaText": "Волшебная лопатка",
"shieldArmoireBubblingCauldronText": "Кипящий котел",
"weaponArmoireMagicSpatulaNotes": "Наблюдайте за тем, как ваши продукты взлетают и переворачиваются в воздухе. Вам повезет, если они перевернутся три раза, а затем приземлятся обратно на лопатку. Увеличивает восприятие на <%= per %>. Зачарованный сундук: Набор кухонной утвари (предмет 1 из 2).",
"shieldArmoireBubblingCauldronNotes": "Идеальный котел для варки полезного зелья или приготовления наваристого супа. На самом деле, разница между ними невелика! Увеличивает телосложение на <%= con %>. Зачарованный сундук: Набор кухонной утвари (предмет 2 из 2)."
"shieldArmoireBubblingCauldronNotes": "Идеальный котел для варки полезного зелья или приготовления наваристого супа. На самом деле, разница между ними невелика! Увеличивает телосложение на <%= con %>. Зачарованный сундук: Набор кухонной утвари (предмет 2 из 2).",
"weaponMystery202212Text": "Ледяной жезл"
}
+2 -1
View File
@@ -216,5 +216,6 @@
"mysterySet202207": "Набор желейной медузы",
"mysterySet202210": "Набор Зловещей змеи",
"mysteryset202211": "Набор электроманта",
"mysterySet202211": "Набор электроманта"
"mysterySet202211": "Набор электроманта",
"mysterySet202212": "Набор ледяного стража"
}
+1 -1
View File
@@ -126,7 +126,7 @@
"achievementShadyCustomer": "Тіньовий клієнт",
"achievementZodiacZookeeperModalText": "Ви зібрали всіх зодіакальних тварин!",
"achievementZodiacZookeeper": "Зодіакальний звіролов",
"achievementZodiacZookeeperText": "Вилупив усіх стандартних зодіакальних тварин: Щура, Корову, Кролика, Змію, Коня, Вівцю, Мавпу, Півня, Вовка, Тигра, Свиню, і Дракона!",
"achievementZodiacZookeeperText": "Вилупив усіх стандартних зодіакальних тварин: Щура, Корову, Кролика, Змію, Коня, Вівцю, Мавпу, Півня, Вовка, Тигра, Свиню та Дракона!",
"achievementBirdsOfAFeatherText": "Зібрав(-ла) усіх літаючих тварин: летюче порося, сову, папугу, птеродактиля, ґрифона, сокола, павича та півня!",
"achievementBirdsOfAFeatherModalText": "Ви зібрали всіх тварин, що літають!",
"achievementBirdsOfAFeather": "Повітряний легіон",
+16 -2
View File
@@ -621,7 +621,7 @@
"backgroundWaterMillNotes": "Подивіться, як крутиться колесо водяного млина.",
"backgroundUnderwaterAmongKoiNotes": "Сліпіть і будьте засліплені блискучими коропами під водою.",
"backgroundGhostShipText": "Корабель-привид",
"backgroundGhostShipNotes": "Доведіть правдивість казок та легенд, коли ви сядете на борт корабля-привид.",
"backgroundGhostShipNotes": "Доведіть правдивість казок та легенд, коли ви підніметесь на борт корабля-привиду.",
"backgroundStoneTowerNotes": "Подивіться з парапетів однієї кам’яної вежі на іншу.",
"backgroundRopeBridgeNotes": "Продемонструйте тим, хто сумнівається, що цей мотузковий міст абсолютно безпечний.",
"backgroundDaytimeMistyForestNotes": "Купайтеся в сяйві денного світла, що ллється крізь Туманний ліс.",
@@ -731,5 +731,19 @@
"backgroundMaskMakersWorkshopText": "Майстерня Маскотворця",
"backgroundMaskMakersWorkshopNotes": "Приміряйте нову маску в майстерні масок.",
"backgroundCemeteryGateText": "Цвинтарна брама",
"backgroundCemeteryGateNotes": "Постійте біля цвинтарних воріт."
"backgroundCemeteryGateNotes": "Постійте біля цвинтарних воріт.",
"backgrounds112022": "Набір 102: листопад 2022",
"backgroundAmongGiantMushroomsText": "Серед гігантських грибів",
"backgroundMistyAutumnForestNotes": "Побродіть туманним осіннім лісом.",
"backgroundInsideACrystalNotes": "Подивіться зсередини кристала.",
"backgroundAmongGiantMushroomsNotes": "Подивуйтеся гігантським грибам.",
"backgroundMistyAutumnForestText": "Туманний осінній ліс",
"backgroundAutumnBridgeText": "Міст восени",
"backgroundAutumnBridgeNotes": "Помилуйтеся красою мосту восени.",
"backgrounds122022": "Набір 103: грудень 2022",
"backgroundBranchesOfAHolidayTreeText": "Гілки святкового дерева",
"backgroundBranchesOfAHolidayTreeNotes": "Пограйтесь на гілках святкової ялинки.",
"backgroundInsideACrystalText": "Всередині кристалу",
"backgroundSnowyVillageText": "Засніжене село",
"backgroundSnowyVillageNotes": "Помилуйтесь засніженим селом."
}
@@ -8,7 +8,7 @@
"commGuideHeadingInteractions": "Взаємодія в Habitica",
"commGuidePara015": "Habitica має публічні та приватні місця для спілкування. Публічні це таверна, відкриті ґільдії, GitHub, Trello, та Wiki. Приватні - закриті ґільдії, чат команди, особисті повідомлення. Всі імена та @нікнейми повинні слідувати правилам публічних місць. Змінити ваше ім'я та/або @нікнейм можна з телефону: бокове меню > Налаштування > Мій акаунт; з веб-версії: Користувач > Налаштування.",
"commGuidePara016": "Є декілька загальних правил, які допоможуть зберегти спокій і задоволення, коли ви вивчаєте нові місця у Habitica.",
"commGuideList02A": "<strong>Поважайте один одного.</strong> Будьте ввічливими, уважними, дружніми та допомагайте іншим. Пам'ятайте: Звичанійці прибули з різних місць і мають дивовижно різний досвід. Це частина того, що робить Habitica кльовою! Влаштування спільноти означає повагу та прийняття наших відмінностей, так само як і наших схожих рис.",
"commGuideList02A": "<strong>Поважайте один одного.</strong> Будьте ввічливими, уважними, дружніми та допомагайте іншим. Пам'ятайте: габітиканці прибули з різних місць і мають дивовижно різний досвід. Це частина того, що робить Habitica кльовою! Влаштування спільноти означає повагу та прийняття наших відмінностей, так само як і наших схожих рис.",
"commGuideList02B": "<strong>Дотримуйтесь усіх <a href='/static/terms' target='_blank'>Загальних положень та умов</a></strong> як у публічних, так і в приватних місцях.",
"commGuideList02C": "<strong>Не публікуйте зображення або тексти, які є насильницькими, загрозливими, сексуально відвертими/наводними, чи пропагують дискримінацію, фанатизм, расизм, сексизм, ненависть, переслідування чи шкоду будь-якій особі чи групі</strong>. Навіть не як жарт чи мем. Це включає образи, а також заяви. Не всі мають однакове почуття гумору, тому те, що ви вважаєте жартом, може зашкодити іншим.",
"commGuideList02D": "<strong>Підтримуйте обговорення відповідними для будь-якого віку</strong>. Це означає уникання тем для дорослих у громадських місцях. У нас є багато молодих габітиканців, які користуються сайтом, і люди приходять з усіх верств суспільства. Ми хочемо, щоб наша громада була максимально комфортною та інклюзивною.",
+1 -1
View File
@@ -93,7 +93,7 @@
"toUserIDRequired": "ID користувача є необхідним",
"gemAmountRequired": "Необхідно ввести кількість самоцівітів",
"notAuthorizedToSendMessageToThisUser": "Ви не можете відправити повідомленя цьому гравцю тому що він заблокував повідомлення.",
"privateMessageGiftGemsMessage": "Привіт <%= receiverName %>, <%= senderName %> прислав вам <%= gemAmount %> самоцвітів!",
"privateMessageGiftGemsMessage": "Привіт, <%= receiverName %>, <%= senderName %> надсилає вам самоцвіти: <%= gemAmount %> (шт.)!",
"cannotSendGemsToYourself": "Не можна відправити самоцвіти самому собі. Натомість, спробуйте підписку.",
"badAmountOfGemsToSend": "Не може бути менше ніж 1 і більше всіх ваших самоцвітів.",
"report": "Пожалітись",
+10 -7
View File
@@ -11,7 +11,7 @@
"questEvilSanta2CollectBranches": "Зламані гілочки",
"questEvilSanta2DropBearCubPolarPet": "Білий ведмідь (улюбленець)",
"questGryphonText": "Полум’яний ґрифон",
"questGryphonNotes": "Великий звіролов, <strong>baconsaur</strong>, прийшов до Вашої групи, шукаючи допомоги. \"Прошу вас, шукачі пригод, Ви повинні мені допомогти! Мій найцінніший ґрифон вирвався на волю й тероризує Звичанію. Якщо зможеш зупинити його, я міг би винагородити тебе кількома її яйцями!\"",
"questGryphonNotes": "Великий звіролов, <strong>baconsaur</strong>, прийшов до вашої команди, шукаючи допомоги. \"Прошу вас, шукачі пригод, Ви повинні мені допомогти! Мій найцінніший ґрифон вирвався на волю й тероризує Габітику. Якщо зможеш зупинити його, я міг би винагородити тебе кількома яйцями з ґрифоном!\"",
"questGryphonCompletion": "Переможене могутнє чудовисько присоромлено плентається назад до свого господаря.\"А бодай мені! Добра робота, шукачі пригод!\" — вигукує <strong>baconsaur</strong>, \"Прошу, візьміть кілька грифонових яєць. Я впевнений, що вам вдасться як слід виростити цю малечу!\"",
"questGryphonBoss": "Полум’яний ґрифон",
"questGryphonDropGryphonEgg": "Яйце ґрифона",
@@ -129,8 +129,8 @@
"questDilatoryDropMantisShrimpPet": "Рак-богомол (улюбленець)",
"questDilatoryDropMantisShrimpMount": "Рак-богомол (скакун)",
"questDilatoryBossRageTavern": "\"Жахливий Драк'он застосовує УДАР ЗАНЕХАЯННЯ!\"\n\nОй-ой! Незважаючи на всі наші зусилля, ми проґавили деякі щоденні справи і їхній темно-червоний колір накликав лють Драк'она! Своїм страшним Ударом Занехаяння він знищив Таверну! На щастя, у місті неподалік ми поставили Господу і завжди можна потеревенити на узбережжі... але бідолашний Бармен Даніель на власні очі побачив, як його улюблений будинок розвалився!\n\nСподіваюся, що звірюка не нападе знову!",
"questDilatoryBossRageStables": "\"Жахливий Драк'он застосовує УДАР ЗАНЕХАЯННЯ!\"\n\nОй, лишенько! Знову ми недоробили багато завдань. Драк'он спрямував свій УДАР ЗАНЕХАЯННЯ на Митька та його стайні! Тваринки-вихованці порозбігалися навсебіч. На щастя, усі ваші улюбленці, здається, у порядку!\n\nБідолашна Звичанія! Сподіваюсь, такого більше не станеться. Покваптеся та виконайте усі свої завдання!",
"questDilatoryBossRageMarket": "`Жахливий Драк'он застосовує УДАР ЗАНЕХАЯННЯ!`\n\nОоой!! Щойно Драк'он Ударом Занехаяння вщент розбив крамницю Торговця Алекса! Та, здається, ми добряче знесилили цю тварюку. Гадаю, він не має більше сил на ще один удар.\n\nТож не відступай, Звичаніє! Проженімо цього звіра геть з наших берегів!",
"questDilatoryBossRageStables": "\"Жахливий Драк'он застосовує УДАР ЗАНЕХАЯННЯ!\"\n\nОй, лишенько! Знову ми недоробили багато завдань. Драк'он спрямував свій УДАР ЗАНЕХАЯННЯ на Митька та його стайні! Тваринки-вихованці порозбігалися навсебіч. На щастя, усі ваші улюбленці, здається, у порядку!\n\nБідолашна Габітика! Сподіваюсь, такого більше не станеться. Покваптеся та виконайте усі свої завдання!",
"questDilatoryBossRageMarket": "`Жахливий Драк'он застосовує УДАР ЗАНЕХАЯННЯ!`\n\nОоой!! Щойно Драк'он Ударом Занехаяння вщент розбив крамницю Торговця Алекса! Та, здається, ми добряче знесилили цю тварюку. Гадаю, він не має більше сил на ще один удар.\n\nТож не відступай, Габітико! Проженімо цього звіра геть з наших берегів!",
"questDilatoryCompletion": "\"Подолання Жахливого Драк'она Некваптиди\"\n\nНам вдалося! Заревівши востаннє, Жахливий Драк'он падає та пливе ген далеко-далеко. На березі вишикувалися натовпи втішених габітиканців! Ми допомогли Митькові, Даніелю та Алексу відбудувати їхні будинки. Але що це?\n\n\"Мешканці повертаються!\"\n\nТепер, коли Драк'он утік, море замерехтіло кольорами. Це різнобарвний рій раків-богомолів... а серед них — сотні морських істот!\n\n\"Ми — забуті жителі Некваптиди!\", — пояснює їхній ватажок Манта. \"Коли Некваптида затонула, раки-богомоли, які жили у цих водах, з допомогою чарів перетворили нас на водяників, щоб ми змогли вижити. Але лютий Жахливий Драк'он усіх нас запроторив до темної ущелини. Ми сотні років сиділи у тому полоні, та тепер нарешті можемо відбудувати своє місто!\"\n\n\"Як подяку,\" — каже його друг @Ottl, — \"Прийміть, будь ласка, цього рака-богомола та рака-богомола скакуна, а також досвід, золото та нашу безмежну вдячність.\"\n\n\"Нагороди\"\n * Рак-богомол улюбленець\n * Рак-богомол скакун\n * Шоколад, блакитна цукрова вата, рожева цукрова вата, риба, мед, м'ясо, молоко, картопля, тухле м'ясо, полуниця",
"questSeahorseText": "Перегони у Некваптиді",
"questSeahorseNotes": "Сьогодні - День перегонів. До Некваптиди прибули габітиканці з усього континенту, щоб влаштувати перегони на своїх морських кониках! Зненацька на біговій доріжці зчиняється шум та гамір і ви чуєте, як власниця морських коників @Kiwibot перекрикує рев хвиль. \"Зібрання морських коників привернуло увагу шаленого Морського жеребця!\" — гукає вона. \"Він поривається через стайні і нищить старовинну дорогу для бігу! Чи може хтось його вгамувати?\"",
@@ -196,7 +196,7 @@
"questRockNotes": "",
"questRockBoss": "",
"questRockCompletion": "",
"questRockDropRockEgg": "Яйце кам'еню",
"questRockDropRockEgg": "Яйце з каменем",
"questRockUnlockText": "Розблоковує купівлю каменю в яйці на ринку",
"questBunnyText": "Кролик-вбивця",
"questBunnyNotes": "",
@@ -428,8 +428,8 @@
"questTriceratopsNotes": "",
"questTriceratopsCompletion": "",
"questTriceratopsBoss": "",
"questTriceratopsDropTriceratopsEgg": "",
"questTriceratopsUnlockText": "Розблоковує купівлю трицератопса в яйці на ринку",
"questTriceratopsDropTriceratopsEgg": "Яйце з трицератопсом",
"questTriceratopsUnlockText": "Розблоковує купівлю на ринку яєць з трицератопсом",
"questGroupStoikalmCalamity": "Лихо Залишспокою",
"questStoikalmCalamity1Text": "Лихо Залишспокою (частина 1): Земляні вороги",
"questStoikalmCalamity1Notes": "",
@@ -657,5 +657,8 @@
"questDolphinNotes": "Ви гуляєте по пляжу бухти Незавершеності, розмірковуючи про складну роботу, яка вас чекає. Раптом вам впадає в очі плескіт у воді. Чудовий дельфін стрибає над хвилями. Сонячне світло відбивається від його плавників і хвоста. Але зачекайте... це не відблиски сонячниї променів, і дельфін не занурюється назад у море. Він фіксує свій погляд на @khdarkwolf.<br><br>«Я ніколи не закінчу всі ці щоденники», — сказав @khdarkwolf.<br><br>«Я недостатньо хороший, щоб досягти своїх цілей», — сказав @confusedcicada, коли дельфін спрямував на неї свій яскравий погляд.<br><br>«Навіщо я взагалі намагався?» запитала @mewrose, в’янучи під поглядом звіра.<br><br>Його погляд зустрічається з вашими, і ви відчуваєте, як ваш розум починає тонути під наростаючою хвилею сумнівів. Ви берете себе в руи; хтось повинен здолати цю істоту, і це будете ви!",
"questDolphinText": "Дельфін сумніву",
"sandySidekicksNotes": "Містить \"Потураючий броненосець\", \"Змія зволікання\" та \"Льодяний Арахнід\". Доступний до <%= date %>.",
"jungleBuddiesNotes": "Містить \"Жахливий мандрил і пустотливі мавпи\", \"Заколисливий лінивець\" та \"Заплутане дерево\". Доступний до <%= date %>."
"jungleBuddiesNotes": "Містить \"Жахливий мандрил і пустотливі мавпи\", \"Заколисливий лінивець\" та \"Заплутане дерево\". Доступний до <%= date %>.",
"questRobotCollectBolts": "Болти",
"questRobotCollectSprings": "Пружини",
"questRobotCollectGears": "Шестерні"
}
+1 -1
View File
@@ -8,7 +8,7 @@
"rebirthOrb": "Після <%= level %> рівня використано кулю переродження, щоби розпочати заново.",
"rebirthOrb100": "Після 100+ рівня використано кулю переродження, щоби розпочати заново.",
"rebirthOrbNoLevel": "Використано кулю переродження, щоби розпочати заново.",
"rebirthPop": "Миттєво перезапустіть свого персонажа як Воїна рівня 1, зберігаючи при цьому досягнення, предмети колекціонування та обладнання. Ваші завдання та їхня історія залишиться, проте вони будуть відновлені до жовтого кольору. Ваші серії будуть вилучені, крім активних задач з випробувань та групових планів.. Ваше золото, досвід, мана та наслідки всіх навичок буде видалено. Все це набуде чинності негайно. Щоб отримати додаткові відомості, перегляньте сторінку <a href='https://habitica.fandom.com/wiki/Orb_of_Rebirth' target='_blank'>Сфера переродження</a> вікі.",
"rebirthPop": "Миттєво перезапустіть свого персонажа як Воїна рівня 1, зберігаючи при цьому досягнення, предмети колекціонування та обладнання. Ваші завдання та їхня історія залишиться, проте вони будуть відновлені до жовтого кольору. Ваші серії будуть вилучені, крім активних задач з випробувань та групових планів. Ваше золото, досвід, мана та наслідки всіх навичок буде видалено. Все це набуде чинності негайно. Щоб отримати додаткові відомості, перегляньте сторінку <a href='https://habitica.fandom.com/wiki/Orb_of_Rebirth' target='_blank'>Сфера переродження</a> на Вікі.",
"rebirthName": "Куля переродження",
"rebirthComplete": "Ви переродилися!",
"nextFreeRebirth": "<strong><%= days %> дн.</strong> поки <strong>FREE</strong> Orb of Rebirth"
+2 -1
View File
@@ -213,5 +213,6 @@
"backgroundAlreadyOwned": "У вас вже є цей фон.",
"mysterySet202204": "Набір віртуального мандрівника",
"mysterySet202210": "Набір зловісного змієносця",
"mysterySet202211": "Набір електроманта"
"mysterySet202211": "Набір електроманта",
"mysterySet202212": "Набір крижаного охоронця"
}
+11 -4
View File
@@ -94,7 +94,7 @@
"backgroundShimmeryBubblesText": "梦幻气泡",
"backgroundShimmeryBubblesNotes": "海市蜃楼梦晶莹,七彩人生一时成。",
"backgroundIslandWaterfallsText": "瀑布岛",
"backgroundIslandWaterfallsNotes": "今古长如白练飞,\n一条界破青山色。",
"backgroundIslandWaterfallsNotes": "今古长如白练飞,一条界破青山色。",
"backgrounds072015": "第14组:2015年7月推出",
"backgroundDilatoryRuinsText": "迂缓遗迹",
"backgroundDilatoryRuinsNotes": "潜入迂缓遗迹。",
@@ -294,9 +294,9 @@
"backgroundBesideWellText": "在古井边",
"backgroundBesideWellNotes": "在古井边漫步。",
"backgroundGardenShedText": "棚屋",
"backgroundGardenShedNotes": "布谷飞飞劝早耕,\n舂锄扑扑趁春晴。",
"backgroundGardenShedNotes": "布谷飞飞劝早耕,舂锄扑扑趁春晴。",
"backgroundPixelistsWorkshopText": "画室",
"backgroundPixelistsWorkshopNotes": "风情意自足,横斜不可加。\n须知自古来,画家须诗家。",
"backgroundPixelistsWorkshopNotes": "风情意自足,横斜不可加。须知自古来,画家须诗家。",
"backgrounds102017": "第41组:2017年10月推出",
"backgroundMagicalCandlesText": "魔法烛室",
"backgroundMagicalCandlesNotes": "游荡在魔法烛室中。",
@@ -738,5 +738,12 @@
"backgroundAmongGiantMushroomsText": "在巨型蘑菇丛",
"backgroundMistyAutumnForestNotes": "漫步在雾秋森林。",
"backgroundMistyAutumnForestText": "雾秋森林",
"backgroundAutumnBridgeNotes": "欣赏秋日小桥的美丽。"
"backgroundAutumnBridgeNotes": "欣赏秋日小桥的美丽。",
"backgrounds122022": "第103组:2022年12月推出",
"backgroundSnowyVillageNotes": "欣赏雪乡美景。",
"backgroundBranchesOfAHolidayTreeText": "假日树的树枝",
"backgroundBranchesOfAHolidayTreeNotes": "在假日树的树枝上嬉戏。",
"backgroundInsideACrystalText": "在水晶内部",
"backgroundInsideACrystalNotes": "在水晶内部观察外界。",
"backgroundSnowyVillageText": "雪之乡"
}
+1 -1
View File
@@ -155,7 +155,7 @@
"confirmPasswordPlaceholder": "确保你的密码相同!",
"joinHabitica": "加入Habitica",
"alreadyHaveAccountLogin": "已经是Habitica大陆的勇者了?<strong>从这里进入吧!</strong>",
"dontHaveAccountSignup": "还不是我们的一份子?<strong>在这里登记。</strong>",
"dontHaveAccountSignup": "还不是我们的一份子?<strong>在这里注册。</strong>",
"motivateYourself": "激励自己,实现目标。",
"timeToGetThingsDone": "完成了所有的任务,该娱乐一下!快快成为Habitica的一份子吧!超过<%= userCountInMillions %>百万Habitica居民等着你!你完成的每一个任务都有助于改善生活。",
"singUpForFree": "免费注册",
+15 -1
View File
@@ -2740,5 +2740,19 @@
"shieldArmoireBubblingCauldronText": "咕嘟冒泡锅",
"weaponArmoireMagicSpatulaText": "魔法锅铲",
"shieldArmoireBubblingCauldronNotes": "这是一口完美大锅,可以酿造生产力药水或烹饪美味汤肴。事实上,两者几乎没有区别!增加点<%=con%>体质。魔法衣橱:厨具套装(2/2)。",
"weaponArmoireMagicSpatulaNotes": "看着你的食物在空中飞舞。如果它神奇地翻了三次,然后又落在你的锅铲上,你将会获得一天的好运。增加<%=per%>点感知。魔法衣橱:厨具套装(1/2)。"
"weaponArmoireMagicSpatulaNotes": "看着你的食物在空中飞舞。如果它神奇地翻了三次,然后又落在你的锅铲上,你将会获得一天的好运。增加<%=per%>点感知。魔法衣橱:厨具套装(1/2)。",
"weaponArmoireFinelyCutGemText": "完美宝石",
"weaponArmoireFinelyCutGemNotes": "看看我发现了什么!这颗惊人工艺切割的宝石将成为您收藏品。它好像包含一些特殊的魔力,一直等待你去挖掘它。增加<%= con %>点体质。魔法衣橱:宝石套装(4/4)。",
"armorMystery202212Notes": "宇宙可能很冷,但这件迷人的衣服会让你在飞行时保持舒适。没有属性加成。2022年12月订阅者物品。",
"armorArmoireJewelersApronNotes": "这条厚重的围裙适合在创意工作时穿上。最棒的一点是有几十个小口袋可以装下你需要的一切。增加<%=int%>点智力。魔法衣橱:宝石套装(1/4)。",
"armorMystery202212Text": "冰川连衣裙",
"armorArmoireJewelersApronText": "珠宝商的围裙",
"shieldArmoireJewelersPliersText": "珠宝钳",
"shieldArmoireJewelersPliersNotes": "他们剪、扭、捏等等。这个工具可以帮助您实现任何灵感。增加<%=str%>点力量。魔法衣橱:宝石套装(3/4)。",
"headAccessoryMystery202212Text": "寒冰之冠",
"headAccessoryMystery202212Notes": "用这顶华丽的金色头饰将你的热情和友谊提升到新的高度。没有属性加成。2022年12月订阅者物品。",
"eyewearArmoireJewelersEyeLoupeText": "珠宝商的放大镜",
"weaponMystery202212Text": "寒冰法杖",
"weaponMystery202212Notes": "即使在最寒冷的冬夜,这根魔杖里闪闪发光的雪花也能温暖人心!没有属性加成。2022年12月订阅者物品。",
"eyewearArmoireJewelersEyeLoupeNotes": "这个放大镜放大了你眼前的事物,方便你看到所有细节。增加<%=per%>点感知。魔法衣橱:宝石套装(2/4)。"
}
+2 -1
View File
@@ -216,5 +216,6 @@
"mysterySet202209": "魔法学者套装",
"mysterySet202210": "不祥之蛇套装",
"mysteryset202211": "电磁套装",
"mysterySet202211": "电磁套装"
"mysterySet202211": "电磁套装",
"mysterySet202212": "冰川守护者套装"
}
@@ -183,6 +183,11 @@ const animalSetAchievs = {
titleKey: 'achievementDomesticated',
textKey: 'achievementDomesticatedText',
},
polarPro: {
icon: 'achievement-polarPro',
titleKey: 'achievementPolarPro',
textKey: 'achievementPolarProText',
},
reptacularRumble: {
icon: 'achievement-reptacularRumble',
titleKey: 'achievementReptacularRumble',
@@ -18,7 +18,7 @@ export default prefill({
setPrice: 5, availableFrom: '2022-10-04T08:00-04:00', availableUntil: EVENTS.fall2022.end, text: t('hauntedColors'),
},
winteryHairColors: {
setPrice: 5, availableFrom: '2021-12-23T08:00-05:00', availableUntil: '2022-01-31T20:00-05:00', text: t('winteryColors'),
setPrice: 5, availableFrom: '2023-01-17T08:00-05:00', availableUntil: EVENTS.winter2023.end, text: t('winteryColors'),
},
rainbowSkins: { setPrice: 5, text: t('rainbowSkins') },
animalSkins: { setPrice: 5, text: t('animalSkins') },
@@ -33,6 +33,6 @@ export default prefill({
setPrice: 5, availableFrom: '2022-07-05T08:00-05:00', availableUntil: EVENTS.summer2022.end, text: t('splashySkins'),
},
winterySkins: {
setPrice: 5, availableFrom: '2021-12-23T08:00-05:00', availableUntil: '2022-01-31T20:00-05:00', text: t('winterySkins'),
setPrice: 5, availableFrom: '2023-01-17T08:00-05:00', availableUntil: EVENTS.winter2023.end, text: t('winterySkins'),
},
});
+2 -1
View File
@@ -85,8 +85,9 @@ const bundles = {
'evilsanta2',
'penguin',
],
event: EVENTS.winter2023,
canBuy () {
return moment().isBetween('2022-01-11T08:00-05:00', '2022-01-31T20:00-05:00');
return moment().isBetween(EVENTS.winter2023.start, EVENTS.winter2023.end);
},
type: 'quests',
value: 7,
@@ -41,6 +41,18 @@ const ANIMAL_SET_ACHIEVEMENTS = {
achievementKey: 'domesticated',
notificationType: 'ACHIEVEMENT_ANIMAL_SET',
},
polarPro: {
type: 'pet',
species: [
'BearCub',
'Fox',
'Penguin',
'Whale',
'Wolf',
],
achievementKey: 'polarPro',
notificationType: 'ACHIEVEMENT_ANIMAL_SET',
},
reptacularRumble: {
type: 'pet',
species: [
@@ -10,11 +10,23 @@ const gemsPromo = {
export const EVENTS = {
noEvent: {
start: '2022-11-27T20:00-05:00',
end: '2022-12-20T08:00-05:00',
start: '2023-01-31T20:00-05:00',
end: '2023-02-14T08:00-05:00',
season: 'normal',
npcImageSuffix: '',
},
winter2023: {
start: '2022-12-20T08:00-05:00',
end: '2023-01-31T23:59-05:00',
npcImageSuffix: '_winter',
season: 'winter',
gear: true,
},
g1g12022: {
start: '2022-12-15T08:00-05:00',
end: '2023-01-08T23:59-05:00',
promo: 'g1g1',
},
harvestFeast2022: {
start: '2022-11-22T08:00-05:00',
end: '2022-11-27T20:00-05:00',
@@ -47,6 +47,11 @@ const SEASONAL_SETS = {
'winter2022StockingWarriorSet',
'winter2022PomegranateMageSet',
'winter2022IceCrystalHealerSet',
'winter2023RibbonRogueSet',
'winter2023WalrusWarriorSet',
'winter2023FairyLightsMageSet',
'winter2023CardinalHealerSet',
],
spring: [
// spring 2014
+63 -7
View File
@@ -1,6 +1,60 @@
import t from './translation';
const NUMBER_OF_QUESTIONS = 12;
const questionList = [
{
heading: 'overview',
translationIndex: 0,
},
{
heading: 'set-up-tasks',
translationIndex: 1,
},
{
heading: 'sample-tasks',
translationIndex: 2,
},
{
heading: 'task-color',
translationIndex: 3,
},
{
heading: 'health',
translationIndex: 4,
},
{
heading: 'party-with-friends',
translationIndex: 5,
},
{
heading: 'pets-mounts',
translationIndex: 6,
},
{
heading: 'character-classes',
translationIndex: 7,
},
{
heading: 'blue-mana-bar',
translationIndex: 8,
},
{
heading: 'monsters-quests',
translationIndex: 9,
},
{
heading: 'gems',
translationIndex: 10,
},
{
heading: 'bugs-features',
translationIndex: 11,
},
{
heading: 'group-plans',
translationIndex: 13,
excludedPlatforms: ['android', 'ios'],
},
];
const faq = {
questions: [],
@@ -10,12 +64,14 @@ const faq = {
},
};
for (let i = 0; i <= NUMBER_OF_QUESTIONS; i += 1) {
questionList.forEach(listEntry => {
const question = {
question: t(`faqQuestion${i}`),
ios: t(`iosFaqAnswer${i}`),
android: t(`androidFaqAnswer${i}`),
web: t(`webFaqAnswer${i}`, {
exclusions: listEntry.excludedPlatforms || [],
heading: listEntry.heading,
question: t(`faqQuestion${listEntry.translationIndex}`),
android: t(`androidFaqAnswer${listEntry.translationIndex}`),
ios: t(`iosFaqAnswer${listEntry.translationIndex}`),
web: t(`webFaqAnswer${listEntry.translationIndex}`, {
// TODO: Need to pull these values from nconf
techAssistanceEmail: 'admin@habitica.com',
wikiTechAssistanceEmail: 'mailto:admin@habitica.com',
@@ -23,6 +79,6 @@ for (let i = 0; i <= NUMBER_OF_QUESTIONS; i += 1) {
};
faq.questions.push(question);
}
});
export default faq;
@@ -718,27 +718,35 @@ const armor = {
},
winter2022Rogue: {
set: 'winter2022FireworksRogueSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter',
},
winter2022Warrior: {
set: 'winter2022StockingWarriorSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter',
},
winter2022Mage: {
set: 'winter2022PomegranateMageSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter',
},
winter2022Healer: {
set: 'winter2022IceCrystalHealerSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter',
},
spring2022Rogue: {
set: 'spring2022MagpieRogueSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
},
spring2022Warrior: {
set: 'spring2022RainstormWarriorSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
},
spring2022Mage: {
set: 'spring2022ForsythiaMageSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
},
spring2022Healer: {
set: 'spring2022PeridotHealerSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
},
birthday2022: {
text: t('armorSpecialBirthday2022Text'),
@@ -748,27 +756,47 @@ const armor = {
},
summer2022Rogue: {
set: 'summer2022CrabRogueSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'summer',
},
summer2022Warrior: {
set: 'summer2022WaterspoutWarriorSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'summer',
},
summer2022Mage: {
set: 'summer2022MantaRayMageSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'summer',
},
summer2022Healer: {
set: 'summer2022AngelfishHealerSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'summer',
},
fall2022Rogue: {
set: 'fall2022KappaRogueSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
},
fall2022Warrior: {
set: 'fall2022OrcWarriorSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
},
fall2022Mage: {
set: 'fall2022HarpyMageSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
},
fall2022Healer: {
set: 'fall2022WatcherHealerSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
},
winter2023Rogue: {
set: 'winter2023RibbonRogueSet',
},
winter2023Warrior: {
set: 'winter2023WalrusWarriorSet',
},
winter2023Mage: {
set: 'winter2023FairyLightsMageSet',
},
winter2023Healer: {
set: 'winter2023CardinalHealerSet',
},
};
@@ -1824,15 +1852,19 @@ const head = {
},
winter2022Rogue: {
set: 'winter2022FireworksRogueSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter',
},
winter2022Warrior: {
set: 'winter2022StockingWarriorSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter',
},
winter2022Mage: {
set: 'winter2022PomegranateMageSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter',
},
winter2022Healer: {
set: 'winter2022IceCrystalHealerSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter',
},
nye2021: {
text: t('headSpecialNye2021Text'),
@@ -1842,39 +1874,69 @@ const head = {
},
spring2022Rogue: {
set: 'spring2022MagpieRogueSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
},
spring2022Warrior: {
set: 'spring2022RainstormWarriorSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
},
spring2022Mage: {
set: 'spring2022ForsythiaMageSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
},
spring2022Healer: {
set: 'spring2022PeridotHealerSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
},
summer2022Rogue: {
set: 'summer2022CrabRogueSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'summer',
},
summer2022Warrior: {
set: 'summer2022WaterspoutWarriorSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'summer',
},
summer2022Mage: {
set: 'summer2022MantaRayMageSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'summer',
},
summer2022Healer: {
set: 'summer2022AngelfishHealerSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'summer',
},
fall2022Rogue: {
set: 'fall2022KappaRogueSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
},
fall2022Warrior: {
set: 'fall2022OrcWarriorSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
},
fall2022Mage: {
set: 'fall2022HarpyMageSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
},
fall2022Healer: {
set: 'fall2022WatcherHealerSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
},
winter2023Rogue: {
set: 'winter2023RibbonRogueSet',
},
winter2023Warrior: {
set: 'winter2023WalrusWarriorSet',
},
winter2023Mage: {
set: 'winter2023FairyLightsMageSet',
},
winter2023Healer: {
set: 'winter2023CardinalHealerSet',
},
nye2022: {
text: t('headSpecialNye2022Text'),
notes: t('headSpecialNye2022Notes'),
value: 0,
canOwn: ownsItem('head_special_nye2022'),
},
};
@@ -2285,7 +2347,6 @@ const shield = {
},
spring2015Rogue: {
set: 'sneakySqueakerSet',
event: EVENTS.spring2021,
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
},
spring2015Warrior: {
@@ -2636,39 +2697,60 @@ const shield = {
},
winter2022Rogue: {
set: 'winter2022FireworksRogueSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter',
},
winter2022Warrior: {
set: 'winter2022StockingWarriorSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter',
},
winter2022Healer: {
set: 'winter2022IceCrystalHealerSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter',
},
spring2022Rogue: {
set: 'spring2022MagpieRogueSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
},
spring2022Warrior: {
set: 'spring2022RainstormWarriorSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
},
spring2022Healer: {
set: 'spring2022PeridotHealerSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'summer',
},
summer2022Rogue: {
set: 'summer2022CrabRogueSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'summer',
},
summer2022Warrior: {
set: 'summer2022WaterspoutWarriorSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'summer',
},
summer2022Healer: {
set: 'summer2022AngelfishHealerSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'summer',
},
fall2022Rogue: {
set: 'fall2022KappaRogueSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
},
fall2022Warrior: {
set: 'fall2022OrcWarriorSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
},
fall2022Healer: {
set: 'fall2022WatcherHealerSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
},
winter2023Rogue: {
set: 'winter2023RibbonRogueSet',
},
winter2023Warrior: {
set: 'winter2023WalrusWarriorSet',
},
winter2023Healer: {
set: 'winter2023CardinalHealerSet',
},
};
@@ -3348,51 +3430,79 @@ const weapon = {
},
winter2022Rogue: {
set: 'winter2022FireworksRogueSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter',
},
winter2022Warrior: {
set: 'winter2022StockingWarriorSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter',
},
winter2022Mage: {
set: 'winter2022PomegranateMageSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter',
},
winter2022Healer: {
set: 'winter2022IceCrystalHealerSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'winter',
},
spring2022Rogue: {
set: 'spring2022MagpieRogueSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
},
spring2022Warrior: {
set: 'spring2022RainstormWarriorSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
},
spring2022Mage: {
set: 'spring2022ForsythiaMageSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
},
spring2022Healer: {
set: 'spring2022PeridotHealerSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'spring',
},
summer2022Rogue: {
set: 'summer2022CrabRogueSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'summer',
},
summer2022Warrior: {
set: 'summer2022WaterspoutWarriorSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'summer',
},
summer2022Mage: {
set: 'summer2022MantaRayMageSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'summer',
},
summer2022Healer: {
set: 'summer2022AngelfishHealerSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'summer',
},
fall2022Rogue: {
set: 'fall2022KappaRogueSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
},
fall2022Warrior: {
set: 'fall2022OrcWarriorSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
},
fall2022Mage: {
set: 'fall2022HarpyMageSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
},
fall2022Healer: {
set: 'fall2022WatcherHealerSet',
canBuy: () => CURRENT_EVENT && CURRENT_EVENT.season === 'fall',
},
winter2023Rogue: {
set: 'winter2023RibbonRogueSet',
},
winter2023Warrior: {
set: 'winter2023WalrusWarriorSet',
},
winter2023Mage: {
set: 'winter2023FairyLightsMageSet',
},
winter2023Healer: {
set: 'winter2023CardinalHealerSet',
},
};
@@ -176,11 +176,11 @@ const premium = {
limited: true,
_addlNotes: t('eventAvailabilityReturning', {
availableDate: t('dateEndJanuary'),
previousDate: t('januaryYYYY', { year: 2020 }),
previousDate: t('januaryYYYY', { year: 2022 }),
}),
event: EVENTS.winter2022,
event: EVENTS.winter2023,
canBuy () {
return moment().isBetween(EVENTS.winter2022.start, EVENTS.winter2022.end);
return moment().isBetween(EVENTS.winter2023.start, EVENTS.winter2023.end);
},
},
Peppermint: {
@@ -200,12 +200,13 @@ const premium = {
value: 2,
text: t('hatchingPotionStarryNight'),
limited: true,
event: EVENTS.winter2023,
canBuy () {
return moment().isBetween('2019-12-19', '2020-02-02');
return moment().isBetween(EVENTS.winter2023.start, EVENTS.winter2023.end);
},
_addlNotes: t('eventAvailabilityReturning', {
availableDate: t('dateEndJanuary'),
previousDate: t('decemberYYYY', { year: 2017 }),
previousDate: t('decemberYYYY', { year: 2019 }),
}),
},
Rainbow: {
@@ -360,11 +361,11 @@ const premium = {
limited: true,
_addlNotes: t('eventAvailabilityReturning', {
availableDate: t('dateEndJanuary'),
previousDate: t('decemberYYYY', { year: 2019 }),
previousDate: t('decemberYYYY', { year: 2020 }),
}),
event: EVENTS.winter2021,
event: EVENTS.winter2023,
canBuy () {
return moment().isBetween('2020-12-22T08:00-04:00', '2021-01-31T20:00-04:00');
return moment().isBetween(EVENTS.winter2023.start, EVENTS.winter2023.end);
},
},
Ruby: {
@@ -5,7 +5,7 @@ import { EVENTS } from './constants';
// path: 'premiumHatchingPotions.Rainbow',
const featuredItems = {
market () {
if (moment().isBetween(EVENTS.bundle202211.start, EVENTS.bundle202211.end)) {
if (moment().isBetween(EVENTS.winter2023.start, EVENTS.winter2023.end)) {
return [
{
type: 'armoire',
@@ -13,15 +13,15 @@ const featuredItems = {
},
{
type: 'premiumHatchingPotion',
path: 'premiumHatchingPotions.Frost',
path: 'premiumHatchingPotions.StarryNight',
},
{
type: 'premiumHatchingPotion',
path: 'premiumHatchingPotions.Ember',
path: 'premiumHatchingPotions.Holly',
},
{
type: 'premiumHatchingPotion',
path: 'premiumHatchingPotions.Thunderstorm',
path: 'premiumHatchingPotions.Aurora',
},
];
}
@@ -32,51 +32,51 @@ const featuredItems = {
},
{
type: 'food',
path: 'food.Milk',
path: 'food.RottenMeat',
},
{
type: 'hatchingPotions',
path: 'hatchingPotions.White',
path: 'hatchingPotions.CottonCandyBlue',
},
{
type: 'eggs',
path: 'eggs.Fox',
path: 'eggs.FlyingPig',
},
];
},
quests () {
if (moment().isBetween(EVENTS.bundle202211.start, EVENTS.bundle202211.end)) {
if (moment().isBetween(EVENTS.winter2023.start, EVENTS.winter2023.end)) {
return [
{
type: 'bundles',
path: 'bundles.rockingReptiles',
path: 'bundles.winterQuests',
},
{
type: 'quests',
path: 'quests.peacock',
path: 'quests.whale',
},
{
type: 'quests',
path: 'quests.harpy',
path: 'quests.turtle',
},
];
}
return [
{
type: 'quests',
path: 'quests.axolotl',
path: 'quests.slime',
},
{
type: 'quests',
path: 'quests.stone',
path: 'quests.seaserpent',
},
{
type: 'quests',
path: 'quests.whale',
path: 'quests.unicorn',
},
];
},
seasonal: 'spring2021Healer',
seasonal: 'winter2022Healer',
timeTravelers: [
// TODO
],
+2 -2
View File
@@ -289,7 +289,7 @@ spells.special = {
target: 'user',
notes: t('spellSpecialSnowballAuraNotes'),
canOwn () {
return moment().isBetween('2021-12-30T08:00-04:00', EVENTS.winter2022.end);
return moment().isBetween('2022-12-27T08:00-05:00', EVENTS.winter2023.end);
},
cast (user, target, req) {
if (!user.items.special.snowball) throw new NotAuthorized(t('spellNotOwned')(req.language));
@@ -435,7 +435,7 @@ spells.special = {
target: 'user',
notes: t('nyeCardNotes'),
canOwn () {
return moment().isBetween('2021-12-30T08:00-04:00', '2022-01-02T20:00-04:00');
return moment().isBetween('2022-12-28T08:00-05:00', '2023-01-02T20:00-05:00');
},
cast (user, target) {
if (user === target) {
@@ -220,6 +220,7 @@ function _getBasicAchievements (user, language) {
_addSimple(result, user, { path: 'reptacularRumble', language });
_addSimple(result, user, { path: 'woodlandWizard', language });
_addSimple(result, user, { path: 'boneToPick', language });
_addSimple(result, user, { path: 'polarPro', language });
_addSimpleWithMasterCount(result, user, { path: 'beastMaster', language });
_addSimpleWithMasterCount(result, user, { path: 'mountMaster', language });
@@ -30,23 +30,24 @@ export default {
pinnedSets: SHOP_OPEN
? {
healer: 'fall2022WatcherHealerSet',
rogue: 'fall2022KappaRogueSet',
warrior: 'fall2022OrcWarriorSet',
wizard: 'fall2022HarpyMageSet',
rogue: 'winter2023RibbonRogueSet',
warrior: 'winter2023WalrusWarriorSet',
wizard: 'winter2023FairyLightsMageSet',
healer: 'winter2023CardinalHealerSet',
}
: {},
availableSpells: SHOP_OPEN && moment().isBetween('2022-10-04T08:00-05:00', CURRENT_EVENT.end)
availableSpells: SHOP_OPEN && moment().isBetween('2022-12-27T08:00-05:00', CURRENT_EVENT.end)
? [
'spookySparkles',
'snowball',
]
: [],
availableQuests: SHOP_OPEN && CURRENT_EVENT.season === 'spring'
availableQuests: SHOP_OPEN && CURRENT_EVENT.season === 'winter'
? [
'egg',
'evilsanta',
'evilsanta2',
]
: [],
featuredSet: 'fall2021BrainEaterMageSet',
featuredSet: 'winter2022PomegranateMageSet',
};
+5 -2
View File
@@ -289,8 +289,11 @@ api.updatePassword = {
newPassword: {
notEmpty: { errorMessage: res.t('missingNewPassword') },
isLength: {
options: { min: common.constants.MINIMUM_PASSWORD_LENGTH },
errorMessage: res.t('minPasswordLength'),
options: {
min: common.constants.MINIMUM_PASSWORD_LENGTH,
max: common.constants.MAXIMUM_PASSWORD_LENGTH,
},
errorMessage: res.t('passwordIssueLength'),
},
},
confirmPassword: {
@@ -9,7 +9,6 @@ import {
NotFound,
} from '../../libs/errors';
import apiError from '../../libs/apiError';
import { flagAllMessages } from '../../libs/chat/group-chat';
import {
validateItemPath,
castItemVal,
@@ -337,7 +336,6 @@ api.updateHero = {
if (updateData.auth && updateData.auth.blocked === true) {
hero.auth.blocked = updateData.auth.blocked;
hero.preferences.sleep = true; // when blocking, have them rest at an inn to prevent damage
await flagAllMessages(hero);
}
if (updateData.auth && updateData.auth.blocked === false) {
hero.auth.blocked = false;
+1
View File
@@ -22,6 +22,7 @@ function _deleteProperties (obj, keysToDelete, platform) {
function _deleteOtherPlatformsAnswers (faqObject, platform) {
const faqCopy = _.cloneDeep(faqObject);
_.remove(faqCopy.questions, question => question.exclusions.indexOf(platform) !== -1);
const keysToDelete = _.without(['web', 'ios', 'android'], platform);
_deleteProperties(faqCopy.stillNeedHelp, keysToDelete, platform);
+6 -7
View File
@@ -10,7 +10,12 @@ const questScrolls = shared.content.quests;
// @TODO: Don't use this method when the group can be saved.
export async function getGroupChat (group) {
const maxChatCount = group.hasActiveGroupPlan() ? MAX_SUBBED_GROUP_CHAT_COUNT : MAX_CHAT_COUNT;
let maxChatCount = MAX_CHAT_COUNT;
if (group.chatLimitCount && group.chatLimitCount >= MAX_CHAT_COUNT) {
maxChatCount = group.chatLimitCount;
} else if (group.hasActiveGroupPlan()) {
maxChatCount = MAX_SUBBED_GROUP_CHAT_COUNT;
}
const groupChat = await Chat.find({ groupId: group._id })
.limit(maxChatCount)
@@ -114,9 +119,3 @@ export function translateMessage (lang, info) {
}
return msg;
}
export async function flagAllMessages (user) {
const bulk = Chat.collection.initializeOrderedBulkOp();
bulk.find({ uuid: user._id }).update({ $set: { flagCount: 3 } });
await bulk.execute();
}
+7
View File
@@ -207,6 +207,13 @@ async function inviteByUserName (username, group, inviter, req, res) {
throw new BadRequest(res.t('cannotInviteSelfToGroup'));
}
const objections = inviter.getObjectionsToInteraction('group-invitation', userToInvite);
if (objections.length > 0) {
throw new NotAuthorized(res.t(
objections[0],
{ userId: userToInvite._id, username: userToInvite.profile.name },
));
}
return addInvitationToUser(userToInvite, group, inviter, res);
}
+3
View File
@@ -91,6 +91,7 @@ export const schema = new Schema({
},
memberCount: { $type: Number, default: 1 },
challengeCount: { $type: Number, default: 0 },
chatLimitCount: { $type: Number },
balance: { $type: Number, default: 0 },
logo: String,
leaderMessage: String,
@@ -871,6 +872,7 @@ function _getUserUpdateForQuestReward (itemToAward, allAwardedItems) {
let updates = {
$set: {},
$inc: {},
$pull: {},
};
const dropK = itemToAward.key;
@@ -878,6 +880,7 @@ function _getUserUpdateForQuestReward (itemToAward, allAwardedItems) {
case 'gear': {
// TODO This means they can lose their new gear on death, is that what we want?
updates.$set[`items.gear.owned.${dropK}`] = true;
updates.$pull.pinnedItems = { path: `gear.flat.${dropK}` };
break;
}
case 'eggs':
+5 -2
View File
@@ -67,8 +67,11 @@ export function setUserStyles (newMessage, user) {
if (userCopy.items) {
userStyles.items.gear = {};
userStyles.items.gear.costume = { ...userCopy.items.gear.costume };
userStyles.items.gear.equipped = { ...userCopy.items.gear.equipped };
if (userCopy.preferences && userCopy.preferences.costume) {
userStyles.items.gear.costume = { ...userCopy.items.gear.costume };
} else {
userStyles.items.gear.equipped = { ...userCopy.items.gear.equipped };
}
userStyles.items.currentMount = userCopy.items.currentMount;
userStyles.items.currentPet = userCopy.items.currentPet;
+4 -4
View File
@@ -150,10 +150,10 @@ function _setUpNewUser (user) {
user.items.quests.dustbunnies = 1;
user.purchased.background.violet = true;
user.preferences.background = 'violet';
if (moment().isBetween('2022-11-22T08:00-05:00', '2022-11-27T20:00-05:00')) {
user.migration = '20221122_harvest_feast';
user.items.pets['Turkey-Base'] = 5;
user.items.currentPet = 'Turkey-Base';
if (moment().isBetween('2022-12-27T08:00-05:00', '2023-01-02T20:00-05:00')) {
user.migration = '20221227_nye';
user.items.gear.owned.head_special_nye = true;
user.items.gear.equipped.head = 'head_special_nye';
}
user.markModified('items achievements');
+1
View File
@@ -152,6 +152,7 @@ export default new Schema({
reptacularRumble: Boolean,
woodlandWizard: Boolean,
boneToPick: Boolean,
polarPro: Boolean,
// Onboarding Guide
createdTask: Boolean,
completedTask: Boolean,