Compare commits

...

224 Commits

Author SHA1 Message Date
Sabe Jones 2f4b8c569a 3.46.2 2016-10-06 23:20:55 +00:00
Sabe Jones 85b5b5a62d chore(event): enable & announce Spooky Sparkles 2016-10-06 22:49:56 +00:00
Blade Barringer 558fb145b5 chore: remove references to debug-scripts 2016-10-04 20:48:36 -05:00
Blade Barringer fc30456b53 chore: remove unused debug scripts 2016-10-04 20:38:40 -05:00
Sabe Jones 68b2d19b04 3.46.1 2016-10-04 23:32:02 +00:00
Blade Barringer 6d33acccf4 fix(api) Allow revoked chat ussers to post in private guilds 2016-10-04 17:49:19 -05:00
Sabe Jones acee4bad80 fix(sprites): add new spritesheet 2016-10-04 17:04:09 +00:00
Sabe Jones 30fe5088b8 3.46.0 2016-10-04 15:55:41 +00:00
Sabe Jones 69602f93e9 chore(sprites): compile 2016-10-04 15:54:55 +00:00
Sabe Jones 0109aa4250 feat(content): Armoire and BGs data (#8095) 2016-10-04 09:57:28 -05:00
Blade Barringer 2dc0958678 chore(docs): Define resource not found errors and permissions 2016-10-03 21:35:53 -05:00
Blade Barringer 52f4e5f37d chore(docs): Update webhook documentation 2016-10-03 17:20:11 -05:00
Blade Barringer c014da297c chore(docs): remove unneeded apiVersion param 2016-10-03 17:11:59 -05:00
Keith Holliday 285041cdee Group tasks ui picked (#7996)
* Added initial group tasks ui

* Changed group compnent directory

* Added group task checklist support

* Added checklist support to ui

* Fixed delete tags route

* Added checklist routes to support new group tasks

* Added assign user tag input

* Added new group members autocomplete directive

* Linked assign ui to api

* Added styles

* Limited tag use

* Fixed line endings

* Updated to new file structure

* Fixed failing task tests

* Updatd with new checklist logic and fixed columns

* Added purchased info to group and prevented non purchased group from seeing new group tasks

* Updated add task function

* Added userid check back to tag routes

* Marked tag tests as pending

* Added comments to pending tests

* Added back routes accidently deleted

* Added locale strings

* Other clarity fixes

* Moved common task function to task service

* Removed files from manifest

* Fixed naming collision and remove logic

* Removed group get tasks until live

* Fixed test to check update task. Removed extra removeTask call. Synced updated checklists. Added purchased to noset

* Fixed delete group task
2016-10-03 22:12:20 +02:00
Sabe Jones 6a82206f81 feat(content): Armoire and BG sprites 2016-10-03 19:23:05 +00:00
Blade Barringer 8b6052a3ca fix(api): Prevent webhooks from having duplicate ids 2016-10-03 08:13:33 -05:00
Alys 04fd907a45 remove incorrect space from an Indonesian locales variable
The mis-formatting of the variable was causing an error when when a user tried to use the "forgot password" feature.

The Linguists have been informed of the need to fix the string in Transifex.
2016-10-03 07:56:30 +10:00
Blade Barringer 70343079f1 Merge branch 'develop' of github.com:HabitRPG/habitrpg into develop 2016-10-02 12:59:09 -05:00
Sabe Jones df952eece5 chore(news): Take This Bailey 2016-10-02 16:03:50 +00:00
Blade Barringer e3a619c7ff 3.45.0 2016-10-02 09:53:54 -05:00
Sabe Jones 23f531372b chore(event): Sept-Oct Take This migration 2016-10-02 14:38:16 +00:00
Blade Barringer 97b15006fd chore: adjust webhook migration to sort webhooks properly 2016-10-02 09:31:28 -05:00
Blade Barringer 35b92f13a3 Webhook improvements (#7879)
* refactor: Move translate test utility to helpers directory

* Add kind property to webhooks

* feat: Add options to create webhook route

* refactor: Move webhook ops into single file

* refactor: Create webhook objects for specific webhook behavior

* chore(tests): Add default sleep helper value of 1 second

* feat(api): Add method for groups to send out webhook

* feat(api): Add taskCreated webhook task creation

* feat(api): Send chat webhooks after a chat is sent

* refactor: Move webhook routes to own controller

* lint: Correct linting errors

* fix(api): Correct taskCreated webhook method

* fix(api): Fix webhook logging to only log when there is an error

* fix: Update groupChatRecieved webhook creation

* chore: Add integration tests for webhooks

* fix: Set webhook creation response to 201

* fix: Correct how task scored webhook data is sent

* Revert group chat recieved webhook to only support one group

* Remove quest activity option for webhooks

* feat: Send webhook for each task created

* feat: Allow webhooks without a type to default to taskScored

* feat: Add logic for adding ids to webhook

* feat: optimize webhook url check by shortcircuiting if no url is passed

* refactor: Use full name for webhook variable

* feat: Add missing params to client webhook

* lint: Add missing semicolon

* chore(tests): Fix inccorect webhook tests

* chore: Add migration to update task scored webhooks

* feat: Allow default value of webhook add route to be enabled

* chore: Update webhook documentation

* chore: Remove special handling for v2

* refactor: adjust addComputedStatsToJSONObject to work for webhooks

* refactor: combine taskScored and taskActivity webhooks

* feat(api): Add task activity to task update and delete routes

* chore: Change references to taskScored to taskActivity

* fix: Correct stats object being passed in for transform

* chore: Remove extra line break

* fix: Pass in the language to use for the translations

* refactor(api): Move webhooks from user.preferences.webhooks to user.webhooks

* chore: Update migration to set webhook array

* lint: Correct brace spacing

* chore: convert webhook lib to use user.webhooks

* refactor(api): Consolidate filters

* chore: clarify migration instructions

* fix(test): Correct user creation in user anonymized tests

* chore: add test that webhooks cannot be updated via PUT /user

* refactor: Simplify default webhook id value

* refactor(client): Push newly created webhook instead of doing a sync

* chore(test): Add test file for webhook model

* refactor: Remove webhook validation

* refactor: Remove need for watch on webhooks

* refactor(client): Update webhooks object without syncing

* chore: update webhook documentation

* Fix migrations issues

* chore: remove v2 test helper

* fix(api): Provide webhook type in task scored webhook

* fix(client): Fix webhook deletion appearing to delete all webhooks

* feat(api): add optional label field for webhooks

* feat: provide empty string as default for webhook label

* chore: Update webhook migration

* chore: update webhook migration name
2016-10-02 09:16:22 -05:00
Alys 556a7e5229 add new loading screen tip for The Bulletin Board guild, as discusssed in Aspiring Socialites 2016-10-02 16:23:17 +10:00
Alys 378625b4af clarify and correct instructions for changing login name and profile name 2016-10-02 16:00:22 +10:00
Blade Barringer ee15e29ba4 3.44.5 2016-09-30 13:01:36 -05:00
Dumindu Buddhika ed880a665a added balance to analytics (#8086)
* added balance to analytics

* removed if check
2016-09-30 11:52:14 -05:00
Blade Barringer 3c7f71d214 chore(i18n): update locales 2016-09-30 11:42:34 -05:00
Blade Barringer edac06b0d1 chore(docs): Update group invite docs 2016-09-30 11:27:08 -05:00
Blade Barringer 24562f8d60 refactor: move total invitation errors to group invite validation method 2016-09-30 11:27:08 -05:00
Blade Barringer 97840ed732 chore: add apidoc watch command 2016-09-30 11:27:08 -05:00
Blade Barringer 76499412ed refactor(api): Move invitation validation to group static method 2016-09-30 11:27:07 -05:00
Julie Torres 9b10f348cc Prevent submission of blank invitation, fixes #7807 (#8080) 2016-09-30 11:25:57 -05:00
Blade Barringer 17b0329c43 chore(i18n): update locales 2016-09-30 08:54:34 -05:00
Blade Barringer cda84a6d68 chore: move randomVal test to correct folder 2016-09-30 08:39:30 -05:00
Blade Barringer 306505ebab fix(api,client): Pass in predictable random to revive randomVal calls
closes #8085
2016-09-30 08:39:30 -05:00
Blade Barringer 2476cdd873 chore: Add test shells for revive 2016-09-30 08:16:04 -05:00
Blade Barringer 8465dd69be chore: Send author's email when sending flag notification to slack 2016-09-30 07:43:15 -05:00
Matteo Pagliazzi 461e7445c2 remove old server_side tests 2016-09-30 12:33:20 +02:00
Matteo Pagliazzi 24df8d8f2f pusher: sync user when reconnecting 2016-09-29 23:30:11 +02:00
Matteo Pagliazzi 2bca92b4d5 3.44.4 2016-09-29 23:22:30 +02:00
Matteo Pagliazzi c3843cae80 client: fix bug that prevented drop notifications from showing up 2016-09-29 23:19:46 +02:00
Sabe Jones 816e4a2f19 3.44.3 2016-09-29 18:12:31 +00:00
Sabe Jones d0d4927e59 fix(login): uncomment Google auth 2016-09-29 18:11:47 +00:00
Sabe Jones 023ff5789d 3.44.2 2016-09-29 17:13:16 +00:00
Blade Barringer cc9be6f4a1 chore(i18n): update locales 2016-09-29 11:53:29 -05:00
Sabe Jones 145bcb6f7c 3.44.1 2016-09-29 16:46:26 +00:00
Sabe Jones d7db599f88 chore(npm): update shrinkwrap 2016-09-29 16:22:44 +00:00
Sabe Jones ca935670f7 chore(event): GaymerX armor & news 2016-09-29 16:16:43 +00:00
AccioBooks c2eb113672 Make Wikia Links Translatable (#7036)
* Wikia Links

* Update contrib.json (Added comma)

* Implement @Alys's Suggestions

* conLearnLink -> conLearnURL

* add link to plans.jade

* Appended "URL" to locale strings with URLs

* Add 's'
2016-09-29 21:57:44 +10:00
Matteo Pagliazzi 257e932bc3 Vue Store (#8071)
* vue: use our own store in place of vuex

* vue store: add getters, watcher and use internal vue instance

* vue store: better state getter and credits to Vuex

* vue store: $watch -> watch

* vuex store: pass store to getters and fix typos

* add comments to store, start writing tests

* fix unit tests and add missing ones

* cleanup components, add less folder, fetch tassks

* use Vuex helpers

* pin vuex version

* move semantic-ui theme to assets/less, keep website/build empty but in git

* import helpers from vuex
2016-09-29 13:32:36 +02:00
Sabe Jones 50e2731811 chore(assets): remove unused promos 2016-09-28 18:47:04 +00:00
Matteo Pagliazzi d67b9e5688 do not send welcome email if user already exists 2016-09-28 19:23:07 +02:00
Blade Barringer bfc7b9d3e8 fix(client): allow admins to open flag modal regardless of flag status
fixes #8078
2016-09-28 08:16:06 -05:00
Blade Barringer eb0e234afa chore(i18n): update locales 2016-09-28 07:44:30 -05:00
Matteo Pagliazzi 177f78cbb0 3.44.0 2016-09-28 12:49:30 +02:00
Phillip Thelen e3b484b29a Add Google Signin (#7969)
* Start adding google login

* fix local js issue

* implement syntax suggestions

* fix delete social tests

* Add service for authentication alerts

* fix social login tests

* make suggested google sign in changes

* fix accidentally deleted code

* refactor social network sign in

* fix incorrect find

* implement suggested google sign in changes

* fix(tests): Inject fake Auth module for auth controller

* fix(test): prevent social service from causing page reload

* fix loading user info

* Use lodash's implimentation of find for IE compatibility

* chore: increase test coverage around deletion route

* chore: clean up social auth test

* chore: Fix social login tests

* remove profile from login scope

* fix(api): Allow social accounts to deregister as user has auth backup

* temporarily disable google login button
2016-09-28 12:11:10 +02:00
Sabe Jones 941000d737 3.43.2 2016-09-28 03:12:35 +00:00
Sabe Jones 63ce7c6034 chore(news): misc Bailey 2016-09-28 02:40:24 +00:00
Sabe Jones 921f9a65a3 feat(content): BG and Armoire strings 201610 2016-09-27 21:15:54 +00:00
Sabe Jones d6bf30eff8 3.43.1 2016-09-27 14:43:34 +00:00
Matteo Pagliazzi faed0dff20 pusher: remove 1 tab limit, better disconnection 2016-09-27 15:25:07 +02:00
Matteo Pagliazzi 7bb2f4a3fa fix semantic-ui site path 2016-09-27 10:09:46 +02:00
Matteo Pagliazzi e3bcea4077 Add semantic-ui (#8076)
* client: add semantic-ui

* add README, disable google fonts

* karma: limit coverage to .vue and .js files

* add missing deps

* semantic-ui in assets folder
2016-09-27 09:34:45 +02:00
Sabe Jones 51ffe2c8c2 A/B Testing, Round 2 (#8077)
* feat(analytics): A/B test 2016-09-26

* feat(tutorial): A/B variant text
2016-09-26 17:10:43 -05:00
Blade Barringer efc0469bef fix(docs): correct email route url in api docs 2016-09-26 14:56:53 -05:00
Sabe Jones bda0617a23 chore(npm): update shrinkwrap 2016-09-26 17:32:33 +00:00
Blade Barringer 913cb16638 refactor: move randomVal to a lib 2016-09-26 11:55:07 -05:00
Blade Barringer 331993c1df refactor: remove seeding from randomVal 2016-09-26 11:55:07 -05:00
Blade Barringer 136e2de125 refactor: adjust randomDrop to use wrapped random function 2016-09-26 11:55:07 -05:00
Blade Barringer 966a50431f refactor: Move user argument to options in randomVal function 2016-09-26 11:55:07 -05:00
Blade Barringer 4df1601718 fix(api): Armoire actually works randomly 2016-09-26 11:55:07 -05:00
Thomas Gamble 4d5b6992be drops are randomly selected, not based on user values fixes #7929 2016-09-26 11:55:07 -05:00
Tom Gamble b54441a637 Shows quest progress notification when completing task #7922 (#7951) 2016-09-23 20:41:31 -05:00
Matteo Pagliazzi bccdf4e989 client: load user based on localStorage (only for testing) (#8055) 2016-09-23 22:39:06 +02:00
Matteo Pagliazzi 633da7ff73 Delete App.vue 2016-09-23 22:18:13 +02:00
Matteo Pagliazzi d3371e323e Vuex Structure (#8054)
* wip: vuex structure

* add missing files

* client: do not fail dev build on eslint error

* eslint does not block compilation, mount app when data is ready

* eslintrc.js -> eslintrc
2016-09-23 19:49:11 +02:00
Sabe Jones 5480157977 fix(shops): 2h weapon pricing 2016-09-23 15:43:45 +00:00
Blade Barringer c5888e3d21 fix(client): Allow backgrounds to be changed 2016-09-23 07:04:11 -05:00
Blade Barringer 2ca185474f fix(client): Advanced options not using preference when creating task
closes #8033
2016-09-22 21:41:42 -05:00
Kaitlin Hipkin 5f0c1687b5 Remove unused v2 code from /website/common/script (#8034)
* remove apiv2 behavior from ops

* remove apiv2 behavior from fns
2016-09-22 21:23:46 -05:00
Sabe Jones 8f9ed6e377 3.43.0 2016-09-22 20:02:48 +00:00
Blade Barringer 1a38546721 chore(i18n): update locales 2016-09-22 13:20:45 -05:00
Sabe Jones 359d9f8d3a fix(analytics): send user on social reg 2016-09-22 18:14:02 +00:00
Sabe Jones ca97732f21 Cows and Ghosts (but no cow ghosts) (#8052)
* feat(content): Mystery Items and Ghost Potions

* fix(news): better cow position

* fix(test): update for season
2016-09-22 13:04:15 -05:00
Sabe Jones e820b55080 fix(shops): open Seasonal Shop in API 2016-09-22 17:02:21 +00:00
Sabe Jones 3d2d01f647 chore(npm): update shrinkwrap 2016-09-22 16:25:45 +00:00
Matteo Pagliazzi b907590bf2 rebuild npm-shrinkwrap 2016-09-22 17:54:40 +02:00
mleko ec01388b5a Fix broken link (#8051)
* Fix broken link

* Update message
2016-09-22 17:24:21 +10:00
Blade Barringer aff475b9c8 chore(i18n): update locales 2016-09-21 19:17:36 -05:00
Sabe Jones 476e06ab8b feat(content): Ghost Hatching Potion string 2016-09-21 19:19:18 +00:00
Sabe Jones 82b905514f feat(content): Subscriber Strings 201609 2016-09-21 19:08:41 +00:00
Sabe Jones 7f1e27f6e4 3.42.1 2016-09-21 14:55:05 +00:00
Matteo Pagliazzi f5315a4f92 typo, correct prod check in build manifest 2016-09-21 16:33:38 +02:00
Blade Barringer c244c3e797 chore(i18n): update locales 2016-09-21 09:27:13 -05:00
Blade Barringer 0102648f8a chore: fix sprite paths in prod (#8048) 2016-09-21 09:20:48 -05:00
Matteo Pagliazzi ed4d955e3e remove console.log 2016-09-21 15:19:36 +02:00
Matteo Pagliazzi 6792e75c7f add dist-client to .eslintignore 2016-09-21 14:57:33 +02:00
Matteo Pagliazzi 62f004222b add .gitkeep to website/static so the build does not fail 2016-09-21 14:49:30 +02:00
Matteo Pagliazzi ed1f0a04ae client: proxy requests to real api 2016-09-21 14:43:50 +02:00
Matteo Pagliazzi bde01c30ad Merge branch 'develop' of github.com:HabitRPG/habitrpg into develop 2016-09-21 14:37:57 +02:00
Matteo Pagliazzi 12275cc174 build new client in production 2016-09-21 14:37:44 +02:00
Matteo Pagliazzi f751ccacc5 expose new client at /new-app, can be enabled in prod setting a flag 2016-09-21 13:43:39 +02:00
Sabe Jones d371297482 fix(migration): remove connect string 2016-09-21 03:20:28 +00:00
Sabe Jones 00b75b23bb chore(sprites): remove Stressbeast 2016-09-21 03:17:02 +00:00
Sabe Jones 589b2aaf3a 3.42.0 2016-09-21 01:34:33 +00:00
Sabe Jones 676d9aedf1 Begin Fall Festival 2016 (#8043)
* feat(event): begin Fall Festival 2016

* feat(event): Seasonal Shop Fall 2016

* fix(test): season specific food

* chore(news): add Bailey

* fix(season): correct Sorceress & timetrav
2016-09-20 20:11:32 -05:00
Sabe Jones 67febde1cb fix(analytics): send user on reg (#8044)
Also fixes an issue that could prevent item name data from being correctly sent to Amplitude.
2016-09-20 20:11:12 -05:00
Blade Barringer 019560df64 chore(i18n): update locales 2016-09-20 17:42:17 -05:00
Sabe Jones 8b1dd43e0a feat(event): Seasonal Shop strings Fall 2015 2016-09-20 19:35:26 +00:00
Matteo Pagliazzi 2f626c7875 Vuex (#8041)
* add vuex, cleanup client directory and create example components

* disale sample unit test

* disable import for non existing file

* correct regexp for unit tests, add simple test to avoid error, add babel-polyfill for Vuex

* add line wrongly removed, update regexp
2016-09-20 18:58:02 +02:00
Blade Barringer 381bea1e94 chore(i18n): update locales 2016-09-20 11:49:18 -05:00
Sabe Jones c12b0890d5 feat(content): Fall 2016 strings 2016-09-20 16:46:24 +00:00
Blade Barringer 5ceb470464 Merge pull request #8031 from Ozzystrasza/challenges_select_all
Fix "All" button to select all guilds in the filter list
2016-09-20 08:08:31 -05:00
Blade Barringer d5d27355da refactor(client): Only omit complex properties from task update object 2016-09-20 08:00:13 -05:00
Rebecca 190aa2c0e7 Updating a task now sends only data that's actually needed (Fixes #7846) (#8040)
* Updating a task now sends only data that's actually needed (Fixes #7846)

Updating a task with a huge history lead to 'request entity too large' errors since the client attempted to send all data associated with a task, regardless of whether that data could be changed or not. With this change, the post request is now omitting the following fields:

challenge
completed
createdAt
group
history
id
reminders
tags
type
updatedAt
userId

* Changes according to review (use _.omit)
2016-09-20 07:59:49 -05:00
Blade Barringer fb8ec7677c chore(i18n): update locales 2016-09-20 07:49:20 -05:00
Blade Barringer c4c70ba1bd fix: Clarify what toRequired string means 2016-09-20 07:46:54 -05:00
Blade Barringer 248fd1d912 chore(docs): Add documentation for valid skill ids 2016-09-19 21:54:02 -05:00
Blade Barringer 5fa76f6aeb feat(api): Add route to export pms as HTML
fixes #7939
closes #7999
2016-09-19 21:32:58 -05:00
Matteo Pagliazzi f90a31b4be pusher: when disconnecting from tab because of inactivity, do not connect other tab 2016-09-19 16:16:13 +02:00
Blade Barringer e3b9636c42 refactor(cient): Simplify char resize logic
closes #6836
2016-09-18 21:27:59 -05:00
Lucas Torroba 7f5d070ee6 Fixes issue #6679, which referred to the EXP chart getting cropped. 2016-09-18 21:26:59 -05:00
Alys 28bb543397 specify that Orb of Rebirth does not remove equipment (in Reset advice) 2016-09-19 08:00:42 +10:00
Matteo Pagliazzi 4f3a9802c1 Vue Project Setup (#8018)
* add files for new client side and reorg gulp tasks

* add deps and script for new client

* fix webpack paths so that building works

* fix static assets not copied into prod build

* fix linting

* add eslint deps and re-enable it in webpack

* add most missing deps for client side and split .babelrc for client

* reorganize .eslintignore

* update client tests paths and .gitignore

* uncomment code

* client: move App component

* client: update oaths in App component

* fix client tests and add more deps

* add client side tests to npm test

* fix typo in depencency name

* update more deps

* fix karma.conf.js and upgrade phantomjs

* fix dep and move karma.conf to subdirectory

* update karma.conf.js position in Gruntfile

* try downgrading phantomjs

* Fixup client tests (#8032)

* Use phantom 2

* fix(tests): Fix refresher test

* gitignore translation mock

* Update karma version

* disable e2e tests for new client from build

* write vue templates with pug

* add basic routing

* remove unnecessary Function.bind shim

* remove unused dependency
2016-09-18 21:51:20 +02:00
Blade Barringer c615af82f8 Merge pull request #8030 from crookedneighbor/switch_serverside_markdown
Switch serverside markdown
2016-09-17 21:04:01 -05:00
Sabe Jones 4468c2ca2f 3.41.4 2016-09-17 03:49:23 +00:00
Sabe Jones ff53552fd3 chore(news): Bailey 20160916
And compile in Beffymaroo promo sprite
2016-09-17 03:33:02 +00:00
Ozzystrasza f3f4229e49 use groupsFilter for search.group 2016-09-17 00:23:16 -03:00
Blade Barringer d782ed5d20 chore: compile sprites 2016-09-16 21:03:28 -05:00
Blade Barringer 31a6e89be9 Update shrinkwrap 2016-09-16 20:51:22 -05:00
Blade Barringer b3f21421e5 chore: remove unused packages 2016-09-16 20:35:15 -05:00
Blade Barringer a70b8bc82b Use markdown in faq locales where possible 2016-09-16 20:35:10 -05:00
Blade Barringer de9644f126 chore: switch out markdown-it for habitica-markdown 2016-09-16 20:35:06 -05:00
Sabe Jones 8b83d8d4e9 fix(sprites): use correct URL in CSS 2016-09-16 22:54:52 +00:00
Sabe Jones c7fd6701ae 3.41.3 2016-09-16 21:58:00 +00:00
AccioBooks 5d18640215 Pluralization (#8027) 2016-09-16 16:14:23 -05:00
Sabe Jones bde6b7d6ce chore(contact): revert community manager links (#8028) 2016-09-16 16:09:57 -05:00
Blade Barringer 5393c3b6c0 chore(i18n): update locales 2016-09-16 15:49:15 -05:00
Blade Barringer 84136882d3 fix: Add back in missing translation string
closes #8026
2016-09-16 15:40:34 -05:00
Sabe Jones 86c9bddc09 Handle social auth in A/B testing (#8024)
* fix(AB-testing): handle social auth

* refactor(AB-testing): move to pre save hooks
2016-09-16 19:13:21 +02:00
Blade Barringer 81b7eeeb71 Common reorg (#8025)
* Re-organize common folder

* fix: Correct paths in tests

* fix: move new content to proper folder

* chore: Move audio folder to assets

* Move sprites to sprites assets directory

* Move css sprites to assets directory

* Split out readmes for common code and sprites

* Move images to assets directory

* Move destinatin of shared browserified file

* remove unused file

* move compiled js to client-old

* Fix karma tests

* fix: Correct paths for sprites
2016-09-16 17:18:07 +02:00
Matteo Pagliazzi d971e673af fix typo 2016-09-16 15:28:57 +02:00
Matteo Pagliazzi 603226a084 make sure Pusher cannot get stuck 2016-09-16 15:12:32 +02:00
Matteo Pagliazzi a38f524d62 sync user n party chat system message 2016-09-16 14:36:38 +02:00
Matteo Pagliazzi 3b0e6e138a better handling of pusher connection with logging 2016-09-16 13:09:59 +02:00
Blade Barringer 9c0998c29a refactor(client): extract find pet logic into function 2016-09-15 22:02:11 -05:00
Oziris Moreira 4ad50b9d30 Fix Magic Mount Spacing (#8015)
* fix magic mount spacing

* simplify functions

* function hasAPetOfPotion

* var premiumPotion
2016-09-15 22:01:31 -05:00
Matteo Pagliazzi 998037e0a1 update npm-shrinkwrap.json 2016-09-15 23:46:03 +02:00
Oziris Moreira 2539655932 make eyewear purchaseable (#8010) 2016-09-15 07:46:53 -05:00
Matteo Pagliazzi 3d72233d54 fix Gruntfile path to old client tests 2016-09-15 13:05:35 +02:00
Matteo Pagliazzi ab84e88650 reorganize old client tests 2016-09-15 13:05:23 +02:00
Sabe Jones a4fd687510 3.41.2 2016-09-14 22:28:15 +00:00
Matteo Pagliazzi 0d1b5aad7e rtc fixes: do not show notification if message was sent by current user from different computer or mobile, put back message syncing on posting for guilds and tavern 2016-09-14 23:19:32 +02:00
Blade Barringer 1484f8afe3 fix: only report webhook error if there is an error 2016-09-14 12:51:50 -05:00
Matteo Pagliazzi 616574d438 fix challenge unit test 2016-09-14 16:51:09 +02:00
Matteo Pagliazzi 33bcb40077 rename client-new to client and add README 2016-09-14 16:43:11 +02:00
Matteo Pagliazzi 6bddef6878 add new client folder and expose it at /new-app when not in production 2016-09-14 16:34:55 +02:00
Matteo Pagliazzi fefcb0f4ac Merge pull request #8013 from HabitRPG/paglias/reorg-client
Rename website/client to website/client-old
2016-09-14 16:22:25 +02:00
Matteo Pagliazzi f6108ddb40 update npm shrinkwrap and add missing dependency for amazon payments 2016-09-14 16:18:28 +02:00
Blade Barringer 0c04a1880b 3.41.1 2016-09-14 08:19:36 -05:00
Matteo Pagliazzi 4b48b7a5f6 rename website/client to website/client-old 2016-09-14 15:06:32 +02:00
Blade Barringer a2febc5f61 chore(i18n): update locales 2016-09-14 08:01:22 -05:00
Blade Barringer 241a031cb3 chore(i18n): update locales 2016-09-14 07:56:52 -05:00
Blade Barringer 555ddbbe4c fix: allow todo due date to be edited 2016-09-14 07:43:35 -05:00
Blade Barringer 8b0b326aef chore(i18n): update locales 2016-09-13 22:28:01 -05:00
Blade Barringer 269a0fd1e6 chore(i18n): update locales 2016-09-13 20:27:43 -05:00
Blade Barringer e12e820f0a fix: Remove flavor from translation string 2016-09-13 20:23:48 -05:00
Blade Barringer 48a2b1e66e chore(i18n): update locales 2016-09-13 17:45:11 -05:00
Sabe Jones 0fe0c38a17 3.41.0 2016-09-13 22:00:14 +00:00
Matteo Pagliazzi 50ea1f5b08 RTC: add modal for desktop notifications (#8007)
* add initial modal for desktop notifications

* add missing files

* vertically center modal and use callback on safari

* fix(modal): update wording
2016-09-13 16:08:54 -05:00
Sabe Jones 52d8667fdb feat(content): Pet Quest 201909 2016-09-13 20:01:53 +00:00
cincospenguinos f5f8f8c246 Players able to flag their own messages - Fixes #8005 (#8006)
* Players able to flag their own messages

* Modify test case to match the new behavior

* Remove a comment and a locales message
2016-09-13 12:23:11 -05:00
Blade Barringer bbe4759691 fix(client): Correct behavior for editting new tasks 2016-09-13 12:11:56 -05:00
Blade Barringer cbefc13e25 Revert "Revert "fixes task edit cancellation commit (#7931)""
This reverts commit 2da9876e42.
2016-09-13 11:52:47 -05:00
Blade Barringer 25aaa351ee chore(i18n): update locales 2016-09-13 11:52:18 -05:00
Sabe Jones 2da9876e42 Revert "fixes task edit cancellation commit (#7931)"
This reverts commit bbf15e1756.
2016-09-13 16:32:52 +00:00
Travis 282822def6 Don't show items in the seasonal shop that can't be purchased (#7859)
* making an api chnage so the seasonal shop will only return items that the user has never owned instead of all items the user doesn't currently own

* fixing commit so shop doesn't show already owned items

* recommenting out seasonal shop message as it's currently closed
2016-09-13 08:15:11 -05:00
Sabe Jones f20a7b851f feat(analytics): AB testing
User model update for AB tests, and the first AB test to start Sept 12

closes #7984
2016-09-12 22:13:25 -05:00
Kaitlin Hipkin 6f2767edd3 Separate stats and achievs pages (#7804)
* separate stats and achievs tabs, move 'enable class system' button to stats

* move stats layout stuff from profile.jade to stats.jade

* shuffle stats page into more columns

* separate stats and achievs in expandable navbar submenus

* add multiple options for stats.jade: col1, col2, all; fixes weirdly crowded members modal

* make stats and achievs strings consistent

* remove mobile checks in profile.jade

* fix merge issue
2016-09-12 22:04:47 -05:00
Kaitlin Hipkin c126aa532c cron does not count days with all-grey dailies as perfect (#7983) 2016-09-12 21:30:35 -05:00
Travis bbf15e1756 fixes task edit cancellation commit (#7931)
* fixes the commit that shows actual task values when task edit is canceled.

This reverts commit 3d64f2b849.

* removing _edit references from fields of a task that can't change and are always set

* removing _edit from task.type as type cannot change while editing.

* Addressing comments by blade
2016-09-12 21:23:23 -05:00
AccioBooks 289b5c2a42 Remove "flicker" (#7926) 2016-09-12 21:10:37 -05:00
Blade Barringer 3f03aab4ee fix: clean up duplicate translation keys 2016-09-12 21:04:05 -05:00
Blade Barringer 78d5f8c4f5 fix(api): prevent users from signing up with habitica or habitrpg emails
fixes #7633
closes #7659
2016-09-12 20:41:44 -05:00
Blade Barringer 0150b355cb fix: move attachMiddlwares function so mongoose models have tx strings 2016-09-12 20:40:12 -05:00
Blade Barringer d31dc6d9a9 fix: Update notifications lib to make it testable
closes #7770
closes #7782
2016-09-12 16:59:52 -05:00
Blade Barringer 9d537d93d8 fix(client): Copy inbox messages to tasks
fixes #7017
closes #6994
2016-09-12 08:01:50 -05:00
Blade Barringer ed702a437d fix: Update challenge controller tests 2016-09-11 22:15:42 -05:00
Blade Barringer 379b318202 fix(client): Allow bulk task adding in challenges
closes #6781
fixes #6723
2016-09-11 21:59:18 -05:00
Blade Barringer 0474b5d2e6 chore(i18n): update locales 2016-09-11 09:19:50 -05:00
Matteo Pagliazzi 71f2f49a28 Merge pull request #7972 from HabitRPG/paglias/realtime-chat-v1
Real Time Chat v1 (parties only)
2016-09-11 12:59:02 +02:00
Travis b73cf2e272 Adding tests to prove expected behavior around force starting a quest (#7848)
* starting

* adding tests to prove the expected behavior occurs around force starting a quest. part of #7653

* fixing up tests and adding functionality to remove user from quest if they are not in the questing party

* adding code to handle when the user is deleted and added a test around that situation

* fixing up comments
2016-09-10 23:10:37 -05:00
Blade Barringer ed4039c08c refactor(api): Use forEach instead of a for loop 2016-09-10 23:03:42 -05:00
Alyssa Batula 923b6c495e Collection quest progress reports "found no [item names]" fixes #7816 (#7883)
* Updated collection quest tests for no found items.

Single-item quests state [user] found no [items]. instead of [user] found nothing. If a
quest has two items, the chat message is [user] found no [item1] and no [item2].

* Collection quest messages changed from [user] found nothing to [user] found no [item]

* Tests for no collection quest items found changed to [user] found 0 [item1], 0 [item2]

* Changed chat messages for no found collection quest items to [user] found 0 [item1], 0 [item2]

* Sort items alphabetically in multi-item quests so that it always returns the same string

* Formatting updates to conform to test specifications (for collection quest progress reports with no items found

* Simplified handling of items not found: any items not found are added to the list of found items with quantity 0 for reporting in the group chat. This also causes all items to appear, in the list, even if only one type is found in a multi-item quest.

* Test the group chat message when no items are found in multi-item quests. Test succes no longer depends on the order items are listed.
2016-09-10 23:03:28 -05:00
Blade Barringer b8878df6bd fix(client): Apply sleep prevention to some avatar generation calls 2016-09-10 22:41:20 -05:00
Alyssa Batula aac38dda91 Avatar's eyes can be set to open or closed in modals while in the Inn fixes #6282 (#7988)
* Avatar model can be set to have eyes open, eyes shut, or left to default by specifying the sleep parameter in generatedAvatar to be false, true, or null (respectively).

* Explicitly check true and false and switched to using triple equals for equality comparisons for avatar sleep setting.
2016-09-10 22:41:00 -05:00
Blade Barringer 3d53781bd3 Fix content name error (#7995)
* fix: correct translation strings for pet/mount names

* chore: expose potion and egg key, not object in pet content api

* fix: Update feed route to use potion and egg objects

* refactor: Update feed route to use petInfo

* Use pet/mount text method for name

* correct feed route
2016-09-10 22:05:25 -05:00
Alys 295463b210 improve instructions about sending login details (no password) 2016-09-11 08:27:31 +10:00
Blade Barringer bf3387703d Pull out animal content into separate files (#7989)
* Pull out animal content into separate files

* Correct variable names

* Add tests for stable, eggs, and hatching potions content

* Add content test back into npm test
2016-09-10 13:37:10 -05:00
Blade Barringer f496a6b0c7 feat: Lower cost of orb of rebirth
closes #7917
fixes #7944
2016-09-09 21:08:42 -05:00
Oziris 0dfb1f150f Provide better invitation messaging
closes #7794
fixes #7789
2016-09-09 20:37:05 -05:00
Matteo Pagliazzi 2d6223377f chat: better behavior for menu notification 2016-09-09 21:34:24 +02:00
Matteo Pagliazzi 60f7a1dbd9 add small timeout before asking for notification permission 2016-09-09 21:26:40 +02:00
Matteo Pagliazzi f6c765b7b5 better notifications icon 2016-09-09 21:03:47 +02:00
Matteo Pagliazzi e2b03ec9cf Merge branch 'develop' into paglias/realtime-chat-v1 2016-09-09 20:13:21 +02:00
Matteo Pagliazzi 98df0f26e7 add notifications, fix too many seen requests and misc fixes 2016-09-09 20:12:17 +02:00
Matteo Pagliazzi a748e57cd7 do not sync automatically on chat seen requests 2016-09-09 19:11:21 +02:00
Oziris Moreira 7d7bb3ecb8 Prevent Challenge page from scrolling to top (#7975)
* Test pageTitle challenge

* Test state name challenge detail

* Change != to !==

* IGNORE_SCROLL_PAGES

* add challenge to ignore_scroll
2016-09-09 08:51:08 -05:00
Kaitlin Hipkin a3f83b9076 Improvement #6912: New achievement modal service and more achievement tests (#6943)
* add tests for beastMaster, mountMaster, and triadBingo achievements

* add tests for challengeWon, streak, ultimateGear, rebirth, and contributor achievements

* add achievement service that has openModal function

* achievement test pass again

* fix indentation, rename openModal to more descriptive displayAchievement

* add unit tests for achievements service

* initialize user.preferences.suppressModals in specHelper.newUser

* update achievement tests to account for new notification service

* add new achievementServices file to manifest.json

* fix tests

* award wonChallenge achiev like other achievs

* differentiate between small and normal achiev modals

* refactor achievementService.displayAchievement() to take options param
2016-09-09 07:58:44 -05:00
Matteo Pagliazzi 94e2691bae Merge branch 'develop' into paglias/realtime-chat-v1 2016-09-08 19:16:37 +02:00
Matteo Pagliazzi 6ba721998a Merge branch 'develop' into paglias/realtime-chat-v1 2016-09-08 19:12:05 +02:00
Matteo Pagliazzi 136b4ada45 renable limit on number of tabs connected 2016-09-08 19:05:03 +02:00
Matteo Pagliazzi cac764e5d1 add online indicator for party members 2016-09-08 18:48:07 +02:00
Matteo Pagliazzi 748e9f7580 Merge branch 'develop' into paglias/realtime-chat-v1 2016-09-07 17:21:43 +02:00
Matteo Pagliazzi ea2be45414 add notifications for real time messages 2016-09-07 17:16:32 +02:00
Matteo Pagliazzi 15ceab4bf4 Merge branch 'develop' into paglias/realtime-chat-v1 2016-09-07 16:59:50 +02:00
Matteo Pagliazzi 85c4332a40 pusher: remove commented code that is unused 2016-09-07 16:51:22 +02:00
Matteo Pagliazzi 40c9c05514 fix first connection to pusher 2016-09-07 16:46:32 +02:00
Matteo Pagliazzi 0baff2dfd9 remove limit of 1 connected tab per browser 2016-09-07 16:44:20 +02:00
Matteo Pagliazzi a4ecdbeb3e fully sync party on system messages 2016-09-07 16:39:53 +02:00
Matteo Pagliazzi fd00543a8d change button text for syncing party 2016-09-07 16:01:21 +02:00
Matteo Pagliazzi f28dead692 do not sync party every time the page is opened, update chat in realtime 2016-09-06 11:18:52 +02:00
Matteo Pagliazzi 6792464fbf limit rtc to parties 2016-09-05 17:54:24 +02:00
6706 changed files with 50204 additions and 42251 deletions
+1 -1
View File
@@ -1,3 +1,3 @@
{
"directory": "website/client/bower_components"
"directory": "website/client-old/bower_components"
}
+18 -19
View File
@@ -1,28 +1,27 @@
# Compiled and vendored files
common/dist/
common/transpiled-babel/
coverage/
database_reports/
website/build/
website/transpiled-babel/
website/common/transpiled-babel/
dist/
dist-client/
# Not linted
migrations/*
# The files in website/client/js should be moved out and browserified
website/client/
# Temporarilly disabled. These should be removed when the linting errors are fixed
common/script/content/index.js
debug-scripts/*
website/client-old/
scripts/*
tasks/*.js
gulpfile.js
Gruntfile.js
newrelic.js
test/api-legacy/**/*
test/common/simulations/**/*
test/content/**/*
test/server_side/**/*
test/spec/**/*
test/client-old/spec/**/*
# Temporarilly disabled. These should be removed when the linting errors are fixed TODO
website/common/script/content/index.js
website/common/browserify.js
test/content/**/*
Gruntfile.js
gulpfile.js
gulp
webpack
test/client/e2e
test/client/unit/index.js
test/client/unit/karma.conf.js
+6 -6
View File
@@ -1,10 +1,10 @@
{
"root": true,
"env": {
"node": true,
},
"extends": [
"habitrpg/server",
"habitrpg/babel"
"habitrpg/es6",
"habitrpg"
],
"globals": {
"Promise": true,
"Set": false
}
}
+14 -11
View File
@@ -1,18 +1,19 @@
.DS_Store
website/client/gen
website/client/common
website/client/apidoc
website/client-old/gen
website/client-old/common
website/client-old/apidoc
website/client-old/js/habitrpg-shared.js*
website/client-old/css/habitrpg-shared.css
website/transpiled-babel/
common/transpiled-babel/
website/common/transpiled-babel/
node_modules
*.swp
.idea*
config.json
npm-debug.log*
lib
website/client/bower_components
website/client/new-stuff.html
website/build
website/client-old/bower_components
website/client-old/new-stuff.html
newrelic_agent.log
.bower-tmp
.bower-registry
@@ -25,14 +26,16 @@ src/*/*.map
src/*/*/*.map
test/*.js
test/*.map
website/client/docs
website/client-old/docs
*.sublime-workspace
coverage
coverage.html
common/dist/scripts/*
common/dist/sprites/habitrpg-shared.css
test/spec/mocks/translations.js
dist
dist-client
test/client/unit/coverage
test/client/e2e/reports
test/client-old/spec/mocks/translations.js
# Elastic Beanstalk Files
.elasticbeanstalk/*
+2
View File
@@ -2,9 +2,11 @@ node_modules/**
.bower-cache/**
.bower-tmp/**
.bower-registry/**
website/client-old/**
website/client/**
website/views/**
website/build/**
dist/**
test/**
.git/**
Gruntfile.js
+27 -29
View File
@@ -9,10 +9,10 @@ module.exports = function(grunt) {
karma: {
unit: {
configFile: 'karma.conf.js'
configFile: 'test/client-old/spec/karma.conf.js'
},
continuous: {
configFile: 'karma.conf.js',
configFile: 'test/client-old/spec/karma.conf.js',
singleRun: true,
autoWatch: false
}
@@ -28,11 +28,11 @@ module.exports = function(grunt) {
report: 'gzip'
},
files:{
"common/dist/sprites/habitrpg-shared.css": [
"common/dist/sprites/spritesmith*.css",
"common/css/backer.css",
"common/css/Mounts.css",
"common/css/index.css"
"website/client-old/css/habitrpg-shared.css": [
"website/assets/sprites/dist/spritesmith*.css",
"website/assets/sprites/css/backer.css",
"website/assets/sprites/css/Mounts.css",
"website/assets/sprites/css/index.css"
]
}
}
@@ -43,11 +43,11 @@ module.exports = function(grunt) {
options: {
compress: false, // AFTER
'include css': true,
paths: ['website/client']
paths: ['website/client-old']
},
files: {
'website/build/app.css': ['website/client/css/index.styl'],
'website/build/static.css': ['website/client/css/static.styl']
'website/build/app.css': ['website/client-old/css/index.styl'],
'website/build/static.css': ['website/client-old/css/static.styl']
}
}
},
@@ -55,13 +55,13 @@ module.exports = function(grunt) {
copy: {
build: {
files: [
{expand: true, cwd: 'website/client/', src: 'favicon.ico', dest: 'website/build/'},
{expand: true, cwd: 'website/client/', src: 'favicon_192x192.png', dest: 'website/build/'},
{expand: true, cwd: '', src: 'common/dist/sprites/spritesmith*.png', dest: 'website/build/'},
{expand: true, cwd: '', src: 'common/img/sprites/backer-only/*.gif', dest: 'website/build/'},
{expand: true, cwd: '', src: 'common/img/sprites/npc_ian.gif', dest: 'website/build/'},
{expand: true, cwd: '', src: 'common/img/sprites/quest_*.gif', dest: 'website/build/'},
{expand: true, cwd: 'website/client/', src: 'bower_components/bootstrap/dist/fonts/*', dest: 'website/build/'}
{expand: true, cwd: 'website/client-old/', src: 'favicon.ico', dest: 'website/build/'},
{expand: true, cwd: 'website/client-old/', src: 'favicon_192x192.png', dest: 'website/build/'},
{expand: true, cwd: 'website/assets/sprites/dist/', src: 'spritesmith*.png', dest: 'website/build/'},
{expand: true, cwd: 'website/assets/sprites/', src: 'backer-only/*.gif', dest: 'website/build/'},
{expand: true, cwd: 'website/assets/sprites/', src: 'npc_ian.gif', dest: 'website/build/'},
{expand: true, cwd: 'website/assets/sprites/', src: 'quest_*.gif', dest: 'website/build/'},
{expand: true, cwd: 'website/client-old/', src: 'bower_components/bootstrap/dist/fonts/*', dest: 'website/build/'}
]
}
},
@@ -77,10 +77,8 @@ module.exports = function(grunt) {
'website/build/*.css',
'website/build/favicon.ico',
'website/build/favicon_192x192.png',
'website/build/common/dist/sprites/*.png',
'website/build/common/img/sprites/backer-only/*.gif',
'website/build/common/img/sprites/npc_ian.gif',
'website/build/common/img/sprites/quest_*.gif',
'website/build/*.png',
'website/build/*.gif',
'website/build/bower_components/bootstrap/dist/fonts/*'
],
dest: 'website/build/*.css'
@@ -88,9 +86,9 @@ module.exports = function(grunt) {
}
});
//Load build files from client/manifest.json
grunt.registerTask('loadManifestFiles', 'Load all build files from client/manifest.json', function(){
var files = grunt.file.readJSON('./website/client/manifest.json');
//Load build files from client-old/manifest.json
grunt.registerTask('loadManifestFiles', 'Load all build files from client-old/manifest.json', function(){
var files = grunt.file.readJSON('./website/client-old/manifest.json');
var uglify = {};
var cssmin = {};
@@ -101,7 +99,7 @@ module.exports = function(grunt) {
_.each(files[key].js, function(val){
var path = "./";
if( val.indexOf('common/') == -1)
path = './website/client/';
path = './website/client-old/';
js.push(path + val);
});
@@ -110,7 +108,7 @@ module.exports = function(grunt) {
_.each(files[key].css, function(val){
var path = "./";
if( val.indexOf('common/') == -1) {
path = (val == 'app.css' || val == 'static.css') ? './website/build/' : './website/client/';
path = (val == 'app.css' || val == 'static.css') ? './website/build/' : './website/client-old/';
}
css.push(path + val)
});
@@ -122,7 +120,7 @@ module.exports = function(grunt) {
grunt.config.set('cssmin.build.files', cssmin);
// Rewrite urls to relative path
grunt.config.set('cssmin.build.options', {'target': 'website/client/css/whatever-css.css'});
grunt.config.set('cssmin.build.options', {'target': 'website/client-old/css/whatever-css.css'});
});
// Register tasks.
@@ -133,7 +131,7 @@ module.exports = function(grunt) {
grunt.registerTask('test:prepare:translations', function() {
var i18n = require('./website/server/libs/i18n'),
fs = require('fs');
fs.writeFileSync('test/spec/mocks/translations.js',
fs.writeFileSync('test/client-old/spec/mocks/translations.js',
"if(!window.env) window.env = {};\n" +
"window.env.translations = " + JSON.stringify(i18n.translations['en']) + ';');
});
@@ -146,6 +144,6 @@ module.exports = function(grunt) {
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-hashres');
grunt.loadNpmTasks('grunt-karma');
if (process.env.NODE_ENV !== 'production') grunt.loadNpmTasks('grunt-karma');
};
-18
View File
@@ -10,21 +10,3 @@ For an introduction to the technologies used and how the software is organized,
To set up a local install of Habitica for development and testing, see [Setting up Habitica Locally](http://habitica.wikia.com/wiki/Setting_up_Habitica_Locally), which contains instructions for Windows, *nix / Mac OS, and Vagrant.
Then read [Guidance for Blacksmiths](http://habitica.wikia.com/wiki/Guidance_for_Blacksmiths) for additional instructions and useful tips.
## Debug Scripts
In the `./debug-scripts/` folder, there are a few files. Here's a sample:
```bash
grant-all-equipment.js
grant-all-mounts.js
grant-all-pets.js
```
You can run them by doing:
```bash
node debug-scripts/name-of-script.js
```
If there are more arguments required to make the script work, it will print out the usage and an explanation of what the script does.
+3 -2
View File
@@ -9,7 +9,7 @@
"ignore": [
"**/.*",
"node_modules",
"website/client/bower_components",
"website/client-old/bower_components",
"test",
"tests"
],
@@ -43,7 +43,8 @@
"smart-app-banner": "78ef9c0679723b25be1a0ae04f7b4aef7cbced4f",
"habitica-markdown": "1.2.2",
"pusher-js-auth": "^2.0.0",
"pusher-websocket-iso": "pusher#^3.1.0"
"pusher-websocket-iso": "pusher#^3.2.0",
"taggle": "^1.11.1"
},
"devDependencies": {
"angular-mocks": "1.3.9"
-4
View File
@@ -1,4 +0,0 @@
{
"extends": "habitrpg/browser"
}
-16
View File
@@ -1,16 +0,0 @@
# Common
Shared resources useful for the multiple Habitica repositories, that way all the repositories remain in-sync with common characteristics. Includes things like:
* Assets - sprites, images, etc
* CSS - especially, esp. sprite-sheet mapping
* Algorithms - level up algorithm, scoring functions, etc
* View helper functions that may come in handy for multiple client MVCs
* Item definitions - weapons, armor, pets
## Compiling spritesheets
Because of some wonkiness with Heroku, the spritesheet compilation is not part of the production build process and must be done manually when new images are added by running:
``` bash
npm run sprites
```
-570
View File
@@ -1,570 +0,0 @@
.2014_Fall_HealerPROMO2 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1331px -1275px;
width: 90px;
height: 90px;
}
.2014_Fall_Mage_PROMO9 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1495px -1011px;
width: 120px;
height: 90px;
}
.2014_Fall_RoguePROMO3 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -758px -1275px;
width: 105px;
height: 90px;
}
.2014_Fall_Warrior_PROMO {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -726px -1378px;
width: 90px;
height: 90px;
}
.promo_android {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -953px -151px;
width: 175px;
height: 175px;
}
.promo_backgrounds_armoire_201602 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1276px -199px;
width: 141px;
height: 294px;
}
.promo_backgrounds_armoire_201603 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1134px -199px;
width: 141px;
height: 294px;
}
.promo_backgrounds_armoire_201604 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -281px -525px;
width: 140px;
height: 441px;
}
.promo_backgrounds_armoire_201605 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -452px 0px;
width: 140px;
height: 441px;
}
.promo_backgrounds_armoire_201606 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -140px -525px;
width: 140px;
height: 447px;
}
.promo_backgrounds_armoire_201607 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: 0px -525px;
width: 139px;
height: 588px;
}
.promo_backgrounds_armoire_201608 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -452px -442px;
width: 140px;
height: 439px;
}
.promo_backgrounds_armoire_201609 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -593px 0px;
width: 139px;
height: 438px;
}
.promo_backtoschool {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -302px -1378px;
width: 150px;
height: 150px;
}
.promo_burnout {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -733px -151px;
width: 219px;
height: 240px;
}
.promo_chairs_glasses {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1633px 0px;
width: 51px;
height: 210px;
}
.promo_classes_fall_2014 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -733px -684px;
width: 321px;
height: 100px;
}
.promo_classes_fall_2015 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1134px -808px;
width: 377px;
height: 99px;
}
.promo_dilatoryDistress {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -999px -1378px;
width: 90px;
height: 90px;
}
.promo_egg_mounts {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1134px -494px;
width: 280px;
height: 147px;
}
.promo_enchanted_armoire {
background-image: url(spritesmith-largeSprites-0.png);
background-position: 0px -1114px;
width: 374px;
height: 76px;
}
.promo_enchanted_armoire_201507 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -839px -967px;
width: 217px;
height: 90px;
}
.promo_enchanted_armoire_201508 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -468px -1275px;
width: 180px;
height: 90px;
}
.promo_enchanted_armoire_201509 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1181px -1378px;
width: 90px;
height: 90px;
}
.promo_enchanted_armoire_201511 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1497px -908px;
width: 122px;
height: 90px;
}
.promo_enchanted_armoire_201601 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: 0px -1529px;
width: 90px;
height: 90px;
}
.promo_floral_potions {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -733px -785px;
width: 105px;
height: 273px;
}
.promo_habitica {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1418px -199px;
width: 175px;
height: 175px;
}
.promo_habitica_sticker {
background-image: url(spritesmith-largeSprites-0.png);
background-position: 0px -220px;
width: 305px;
height: 304px;
}
.promo_haunted_hair {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -593px -734px;
width: 100px;
height: 137px;
}
.promo_item_notif {
background-image: url(spritesmith-largeSprites-0.png);
background-position: 0px -1275px;
width: 249px;
height: 102px;
}
.promo_mystery_201405 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -91px -1529px;
width: 90px;
height: 90px;
}
.promo_mystery_201406 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -635px -1378px;
width: 90px;
height: 96px;
}
.promo_mystery_201407 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1633px -412px;
width: 42px;
height: 62px;
}
.promo_mystery_201408 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1572px -494px;
width: 60px;
height: 71px;
}
.promo_mystery_201409 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -273px -1529px;
width: 90px;
height: 90px;
}
.promo_mystery_201410 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1059px -573px;
width: 72px;
height: 63px;
}
.promo_mystery_201411 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -182px -1529px;
width: 90px;
height: 90px;
}
.promo_mystery_201412 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1633px -345px;
width: 42px;
height: 66px;
}
.promo_mystery_201501 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1633px -211px;
width: 48px;
height: 63px;
}
.promo_mystery_201502 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1363px -1378px;
width: 90px;
height: 90px;
}
.promo_mystery_201503 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1272px -1378px;
width: 90px;
height: 90px;
}
.promo_mystery_201504 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1572px -566px;
width: 60px;
height: 69px;
}
.promo_mystery_201505 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1240px -1275px;
width: 90px;
height: 90px;
}
.promo_mystery_201506 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1633px -275px;
width: 42px;
height: 69px;
}
.promo_mystery_201507 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -544px -1378px;
width: 90px;
height: 105px;
}
.promo_mystery_201508 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1146px -1275px;
width: 93px;
height: 90px;
}
.promo_mystery_201509 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -908px -1378px;
width: 90px;
height: 90px;
}
.promo_mystery_201510 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1052px -1275px;
width: 93px;
height: 90px;
}
.promo_mystery_201511 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -817px -1378px;
width: 90px;
height: 90px;
}
.promo_mystery_201512 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1564px -96px;
width: 60px;
height: 81px;
}
.promo_mystery_201601 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1512px -808px;
width: 120px;
height: 90px;
}
.promo_mystery_201602 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1513px -1275px;
width: 90px;
height: 90px;
}
.promo_mystery_201603 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1422px -1275px;
width: 90px;
height: 90px;
}
.promo_mystery_201604 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -864px -1275px;
width: 93px;
height: 90px;
}
.promo_mystery_201605 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1090px -1378px;
width: 90px;
height: 90px;
}
.promo_mystery_201606 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -453px -1378px;
width: 90px;
height: 105px;
}
.promo_mystery_201607 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1454px -1378px;
width: 90px;
height: 90px;
}
.promo_mystery_201608 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -958px -1275px;
width: 93px;
height: 90px;
}
.promo_mystery_3014 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -250px -1275px;
width: 217px;
height: 90px;
}
.promo_orca {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -593px -872px;
width: 105px;
height: 105px;
}
.promo_partyhats {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -953px -327px;
width: 115px;
height: 47px;
}
.promo_pastel_skin {
background-image: url(spritesmith-largeSprites-0.png);
background-position: 0px -1191px;
width: 330px;
height: 83px;
}
.customize-option.promo_pastel_skin {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -25px -1206px;
width: 60px;
height: 60px;
}
.promo_peppermint_flame {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -306px -220px;
width: 140px;
height: 147px;
}
.promo_pet_skins {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -452px -882px;
width: 140px;
height: 147px;
}
.customize-option.promo_pet_skins {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -477px -897px;
width: 60px;
height: 60px;
}
.promo_shimmer_hair {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -331px -1191px;
width: 330px;
height: 83px;
}
.promo_splashyskins {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1418px -375px;
width: 198px;
height: 91px;
}
.customize-option.promo_splashyskins {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1443px -390px;
width: 60px;
height: 60px;
}
.promo_spring_classes_2016 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1134px -908px;
width: 362px;
height: 102px;
}
.promo_springclasses2014 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -839px -876px;
width: 288px;
height: 90px;
}
.promo_springclasses2015 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -839px -785px;
width: 288px;
height: 90px;
}
.promo_staff_spotlight_Lemoness {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -593px -439px;
width: 102px;
height: 146px;
}
.promo_staff_spotlight_Viirus {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1004px -392px;
width: 119px;
height: 147px;
}
.promo_staff_spotlight_paglias {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -593px -586px;
width: 99px;
height: 147px;
}
.promo_summer_classes_2014 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1134px -96px;
width: 429px;
height: 102px;
}
.promo_summer_classes_2015 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -140px -973px;
width: 300px;
height: 88px;
}
.promo_summer_classes_2016 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -733px 0px;
width: 400px;
height: 150px;
}
.promo_takeThis_gear {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -306px -368px;
width: 114px;
height: 87px;
}
.promo_takethis_armor {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -593px -978px;
width: 114px;
height: 87px;
}
.promo_unconventional_armor {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1055px -684px;
width: 60px;
height: 60px;
}
.promo_updos {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1415px -494px;
width: 156px;
height: 147px;
}
.promo_veteran_pets {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -528px -1114px;
width: 146px;
height: 75px;
}
.promo_winter_classes_2016 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1134px -1011px;
width: 360px;
height: 90px;
}
.promo_winterclasses2015 {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -733px -573px;
width: 325px;
height: 110px;
}
.promo_winteryhair {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -375px -1114px;
width: 152px;
height: 75px;
}
.avatar_variety {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1134px 0px;
width: 498px;
height: 95px;
}
.npc_viirus {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -649px -1275px;
width: 108px;
height: 90px;
}
.party_preview {
background-image: url(spritesmith-largeSprites-0.png);
background-position: 0px 0px;
width: 451px;
height: 219px;
}
.scene_coding {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -151px -1378px;
width: 150px;
height: 150px;
}
.scene_phone_peek {
background-image: url(spritesmith-largeSprites-0.png);
background-position: 0px -1378px;
width: 150px;
height: 150px;
}
.welcome_basic_avatars {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1381px -642px;
width: 246px;
height: 165px;
}
.welcome_promo_party {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -733px -392px;
width: 270px;
height: 180px;
}
.welcome_sample_tasks {
background-image: url(spritesmith-largeSprites-0.png);
background-position: -1134px -642px;
width: 246px;
height: 165px;
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 475 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 418 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

Before

Width:  |  Height:  |  Size: 146 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

Before

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 176 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

Before

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

Before

Width:  |  Height:  |  Size: 136 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

Before

Width:  |  Height:  |  Size: 143 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

Before

Width:  |  Height:  |  Size: 402 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

Before

Width:  |  Height:  |  Size: 154 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

Before

Width:  |  Height:  |  Size: 133 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

Before

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

-5
View File
@@ -1,5 +0,0 @@
Do not edit any files in this directory!
For more information read:
https://github.com/HabitRPG/habitrpg/blob/develop/common/locales/README.md
-5
View File
@@ -1,5 +0,0 @@
Do not edit any files in this directory!
For more information read:
https://github.com/HabitRPG/habitrpg/blob/develop/common/locales/README.md
-5
View File
@@ -1,5 +0,0 @@
Do not edit any files in this directory!
For more information read:
https://github.com/HabitRPG/habitrpg/blob/develop/common/locales/README.md
-6
View File
@@ -1,6 +0,0 @@
You may edit any files in this directory. Do not edit files in any
other locales directory.
For more information read:
https://github.com/HabitRPG/habitrpg/blob/develop/common/locales/README.md
@@ -1,5 +0,0 @@
Do not edit any files in this directory!
For more information read:
https://github.com/HabitRPG/habitrpg/blob/develop/common/locales/README.md
-5
View File
@@ -1,5 +0,0 @@
Do not edit any files in this directory!
For more information read:
https://github.com/HabitRPG/habitrpg/blob/develop/common/locales/README.md
-5
View File
@@ -1,5 +0,0 @@
Do not edit any files in this directory!
For more information read:
https://github.com/HabitRPG/habitrpg/blob/develop/common/locales/README.md
-5
View File
@@ -1,5 +0,0 @@
Do not edit any files in this directory!
For more information read:
https://github.com/HabitRPG/habitrpg/blob/develop/common/locales/README.md
-5
View File
@@ -1,5 +0,0 @@
Do not edit any files in this directory!
For more information read:
https://github.com/HabitRPG/habitrpg/blob/develop/common/locales/README.md
-5
View File
@@ -1,5 +0,0 @@
Do not edit any files in this directory!
For more information read:
https://github.com/HabitRPG/habitrpg/blob/develop/common/locales/README.md
-5
View File
@@ -1,5 +0,0 @@
Do not edit any files in this directory!
For more information read:
https://github.com/HabitRPG/habitrpg/blob/develop/common/locales/README.md
-5
View File
@@ -1,5 +0,0 @@
Do not edit any files in this directory!
For more information read:
https://github.com/HabitRPG/habitrpg/blob/develop/common/locales/README.md
-5
View File
@@ -1,5 +0,0 @@
Do not edit any files in this directory!
For more information read:
https://github.com/HabitRPG/habitrpg/blob/develop/common/locales/README.md
-5
View File
@@ -1,5 +0,0 @@
Do not edit any files in this directory!
For more information read:
https://github.com/HabitRPG/habitrpg/blob/develop/common/locales/README.md
-44
View File
@@ -1,44 +0,0 @@
{
"frequentlyAskedQuestions": "よくある質問",
"faqQuestion0": "わからないことがあって困っています。どこで概要を確認できますか?",
"iosFaqAnswer0": "まず、あなたの毎日の生活の中でやりたいタスクを設定します。そして実生活でそのタスクを完了したらチェックを入れます。すると、ゴールドと経験値を手に入ります。ゴールドでアバターの装備やお好みの「ごほうび」といったアイテムを買えます。経験値によってアバターがレベルアップし、新しいペット、スキルやクエストといった新しい機能をアンロックしていきます! アバターはメニュー >アバターのカスタマイズで設定できます。\n\nいくつかの基本操作 : 右上の (+) をクリックすると、新しいタスクの作成。すでにあるタスクをタップすると編集、左にスワイプすると削除できます。左上でタスクにタグをつけることで並べ替えができます。丸いチェックリストをクリックすることで、表示をたたんだり展開したりできます。",
"webFaqAnswer0": "まず、あなたの毎日の生活の中でやりたいタスクを設定します。そして実生活でそのタスクを完了したらチェックを入れます。すると、ゴールドと経験値を手に入ります。ゴールドでアバターの装備やお好みの「ごほうび」といったアイテムを買えます。経験値によってアバターがレベルアップし、新しいペット、スキルやクエストといった新しい機能をアンロックしていきます! 詳しくは [ヘルプ -> 新規ユーザーのための概要](https://habitica.com/static/overview) を読んでください。",
"faqQuestion1": "どのようにタスクをセットすればいいのですか?",
"iosFaqAnswer1": "いい習慣 ( + がついている習慣) は、「野菜を食べる」というように毎日何度でも行えるものです。悪い習慣( - がついている習慣) は、「つめをかむ」といったやるべきでないくせ・習慣です。+ と - の両方がついている習慣は、「階段で上るか、エレベーターを使うか」といった、いい選択と悪い選択の両方があるものです。いい習慣で経験値とゴールドが得られます。悪い習慣は体力を奪います。\n\n日課は、「歯をみがく」とか「メールをチェックする」といった毎日やるべきことです。日課をやるべき日・曜日を「編集」で調整します。やるべき日に日課を行わないと、アバターは夜中にダメージを受けます。あまりに多くの日課を一度に背負わないように注意が必要です。\n\nTo-Do は「やるべきこと」リストです。To-Do を完了すると、ゴールドと経験値を獲得できます。To-Doでは体力が減ることはありません。「編集」をタップすることで、To-Do のしめきりを設定できます。",
"webFaqAnswer1": "いい習慣 ( <span class='glyphicon glyphicon-plus'></span> がついている習慣) は、「野菜を食べる」というように毎日何度でも行えるものです。悪い習慣( <span class='glyphicon glyphicon-minus'></span> がついている習慣) は、「つめをかむ」といった避けるべきくせ・習慣です。<span class='glyphicon glyphicon-plus'></span> と <span class='glyphicon glyphicon-minus'></span> の両方がついている習慣は、「階段で上るか、エレベーターを使うか」といった、いい選択と悪い選択の両方があるものです。いい習慣で経験値とゴールドが得られます。悪い習慣は体力を奪います。\n\n日課は、「歯を磨く」とか「メールをチェックする」といった毎日やるべきことです。日課をやるべき日・曜日を「編集」で調整します。やるべき日に日課を行わないと、アバターは夜中にダメージを受けます。あまりに多くの日課を一度に背負わないように注意が必要です。\n\nTo-Do は「やるべきこと」リストです。To-Do を完了すると、ゴールドと経験値を獲得できます。To-Doでは体力が減ることはありません。「編集」をタップすることで、To-Do のしめきりを設定できます。",
"faqQuestion2": "タスクのサンプルはありますか?",
"iosFaqAnswer2": "参考のため、Wiki では4種類のタスクのサンプルを用意しています :\n<br><br>\n* [習慣のサンプル](http://habitica.wikia.com/wiki/Sample_Habits)\n* [日課のサンプル](http://habitica.wikia.com/wiki/Sample_Dailies)\n* [To-Do のサンプル](http://habitica.wikia.com/wiki/Sample_To-Dos)\n* [自分好みの「ごほうび」のサンプル](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)",
"webFaqAnswer2": "参考のため、Wiki では4種類のタスクのサンプルを用意しています :\n* [習慣のサンプル](http://habitica.wikia.com/wiki/Sample_Habits)\n* [日課のサンプル](http://habitica.wikia.com/wiki/Sample_Dailies)\n* [To-Do のサンプル](http://habitica.wikia.com/wiki/Sample_To-Dos)\n* [自分好みの「ごほうび」のサンプル](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)",
"faqQuestion3": "なぜタスクの色が変わるんですか ?",
"iosFaqAnswer3": "タスクの色は、最近あなたがどれだけタスクをこなしたかによって変化します! 新しいタスクは中間的な黄色でスタートします。たくさん日課をこなしたり、いい習慣をこなすと青に近づいていきます。日課をやりそこねたり、悪い習慣を行うと赤に近づいていきます。赤くなったタスクは、完了するとより多くの経験値やゴールドなどの報酬が得られますが、それが日課や悪い習慣であれば、よりたくさんのダメージを受けます! あなたにとって面倒なタスクほど、やる気を出すのに役立つことでしょう。",
"webFaqAnswer3": "タスクの色は、最近あなたがどれだけタスクをこなしたかによって変化します! 新しいタスクは中間的な黄色でスタートします。たくさん日課やいい習慣をこなすと青に近づいていきます。日課をやりそこねたり、悪い習慣を行うと赤に近づいていきます。赤くなったタスクは、完了するとより多くの経験値やゴールドなどの報酬が得られますが、それが日課や悪い習慣であれば、よりたくさんのダメージを受けます! あなたにとって面倒なタスクほど、やる気を出すのに役立つことでしょう。",
"faqQuestion4": "なぜ私のアバターの体力が減ったの? 回復する方法は?",
"iosFaqAnswer4": "ダメージを受け、体力が減るのにはいくつかの原因があります。1 つ目、日課をやらないまま夜を明かせば、ダメージを受けます。2 つ目、悪い習慣をチェックすれば、ダメージを受けます。最後に、パーティーでのボス戦の途中で、パーティーの仲間のだれかが日課をやり残した場合、ボスがあなたを攻撃します。\n\n主な回復方法はレベルを上げることで、レベルが上がると体力は全回復します。また、「ごほうび」欄の「体力回復の薬」をゴールドで買っても回復できます。そして、レベル10以上になると、治療師になることができ、回復の特殊能力を覚えます。もしパーティーの仲間に治療師がいれば、回復してもらうことがもきます。",
"webFaqAnswer4": "ダメージを受け、体力が減るのにはいくつかの原因があります。1 つ目、日課をやらないまま夜を明かせば、ダメージを受けます。2 つ目、悪い習慣をチェックすれば、ダメージを受けます。最後に、パーティーでのボス戦の途中で、パーティーの仲間のだれかが日課をやり残した場合、ボスがあなたを攻撃します。\n<br><br>\n主な回復方法はレベルを上げることで、レベルが上がると体力は全回復します。また、「ごほうび」欄の「体力回復の薬」をゴールドで買っても回復できます。そして、レベル10以上になると、治療師になることができ、回復の特殊能力を覚えます。もしパーティー( メニューの 「ソーシャル」 > 「パーティー」 ) の仲間に治療師がいれば、回復してもらうこともできます。",
"faqQuestion5": "友達といっしょに Habitica をプレーするには?",
"iosFaqAnswer5": "いちばんいいのは、あなたといっしょのパーティーに友達を誘うことです! パーティーでは、いっしょにクエストに参加して、いっしょにモンスターと戦い、お互いに特殊能力の魔法で助け合うことができます。もしあなたがまだパーティを組んでいないなら、メニュー > パーティー で、「新しいパーティを作る」をクリックしてください。その後、メンバーリストで、右上の「友達を招待する」ボタンをクリック、あなたの友達のユーザーID ( 設定 > アカウントの詳細 、Webサイト上では 設定 > API 確認できる英数文字列 ) を入力します。Webサイトから、友達にEmailを送って招待することもできます。アプリでの同様の機能は、将来の更新で追加する予定です。\n\nWebサイトでは、あなたと友達はギルドに参加することもできます。ギルドとは公開されたチャットルームです。アプリでのギルド機能は、将来の更新で追加する予定です!",
"webFaqAnswer5": "いちばんいいのは、ソーシャル > パーティー から、あなたといっしょのパーティーに友達を誘うことです! パーティーでは、いっしょにクエストに参加して、いっしょにモンスターと戦い、お互いに特殊能力の魔法で助け合うことができます。いっしょのギルドに入ることもできます ( ソーシャル > ギルド ) 。ギルドは共通の趣味を話題にしたり、共通のゴールを追求するためのチャットルームで、公開・非公開の設定ができます。ギルドは好きなだけ入ることができますが、パーティーは1つだけにしか参加できません。\n<br><br>\nより詳しい情報は、Wikiページの、「パーティー」( http://habitrpg.wikia.com/wiki/Party ) や「ギルド」( http://habitrpg.wikia.com/wiki/Guilds ) をご覧ください。",
"faqQuestion6": "ペットや乗騎はどうやって手に入れるの?",
"iosFaqAnswer6": "レベル3になると「落し物」システムがアンロックされます。あなたがタスクを達成するたびに、「たまご」や「たまごがえしの薬」、または「えさ」を手に入れるチャンスが与えられます。手に入れたアイテムはメニュー > 所持品 に保存されています。\n\n「たまご」からペットをかえすには、「たまご」と「たまごがえし」の薬が必要です。かえしたいペットの卵をクリックすると、かえす「たまご」として選ばれます。次にペットの色にしたい「たまごがえしの薬」を選びます! メニュー > ペットでペットを選ぶと、アバターのそばにペットが表示されます。\n\nペットを育てて乗騎にすることもできます。メニュー > ペット でえさをやりましょう。ペットをタップすると「えさをやるペット」として選ばれます。ペットを乗騎にするにはたくさんのえさが必要ですが、お気に入りのえさだと、より早く成長します。いろいろ試してみてください、もしくは [ 楽しみがなくなるかもしれませんが ] ( http://habitica.wikia.com/wiki/Food#Food_Preferences ) を見てください。乗騎を手に入れたら、メニュー > 乗騎 で、あなたのアバターに表示できます。\n\nクエストによっては、達成することでクエスト ペットのたまごが手に入ります。(クエストについての詳しくは、以下をご覧ください)",
"webFaqAnswer6": "レベル3になると「落し物」システムがアンロックされます。あなたがタスクを達成するたびに、「たまご」や「たまごがえしの薬」、または「えさ」を手に入れるチャンスが与えられます。手に入れたアイテムはメニュー > 所持品 に保存されています。\n<br><br>\n「たまご」からペットをかえすには、「たまご」と「たまごがえし」の薬が必要です。かえしたいペットの「たまご」をクリックすると、かえす対象になります。次にかえしたいペットの色で「たまごがえしの薬」を選びます! メニュー > ペットの画面でペットを選ぶと、アバターのそばにペットが表示されます。\n<br><br>\nペットを育てて乗騎にすることもできます。所持品 > ペット でえさをやりましょう。まずえさをタップして選び、次にペットをタップすることで、えさをやります。ペットを乗騎にするにはたくさんのえさが必要ですが、お気に入りのえさだと、早く成長します。いろいろ試してみてください、もしくは [ ネタバレですが ] ( http://habitica.wikia.com/wiki/Food#Food_Preferences ) を確認してください。乗騎を手に入れたら、所持品 > 乗騎 の画面でクリックすると、あなたのアバターに表示できます。\n<br><br>\n特定のクエストを達成することで、クエスト ペットのたまごが手に入ります。( クエストについては、下記 )",
"faqQuestion7": "どうすれば戦士、魔道士、盗賊、治療師になれるの?",
"iosFaqAnswer7": "レベル10になると、戦士、魔道士、盗賊、治療師のクラスを選べるようになります。( 標準では、すべてのプレイヤーは戦士でスタートします。) クラスによって、装備や、レベル11以降に使えるようになる特殊能力、そして長所が異なります。戦士はボスにダメージを与えるのがうまく、タスクからのダメージへの耐久力も高いので、パーティーがタフになります。魔道士もボスへのダメージを与えるのがうまく、レベルアップが速く、パーティーのマナを回復します。盗賊がいちばんゴールドと落ちているアイテムを獲得でき、パーティーにも同様の効果をもたらします。最後に、治療師は、自分自身とパーティーの仲間の体力を回復することができます。\n\nすぐにクラスを選びたくなければ――たとえば、いまのクラスの装備を買い集めている最中――「後で決める」をクリックし、後から選ぶときは メニュー > クラスを選ぶ で行います。",
"webFaqAnswer7": "レベル10になると、戦士、魔道士、盗賊、治療師のクラスを選べるようになります。( 標準では、すべてのプレイヤーは戦士でスタートします。) クラスによって、装備や、レベル11以降に使えるようになる特殊能力、そして長所が異なります。戦士はボスにダメージを与えるのがうまく、タスクからのダメージへの耐久力も高いので、パーティーがタフになります。魔道士もボスへのダメージを与えるのがうまく、レベルアップが速く、パーティーのマナを回復します。盗賊がいちばんゴールドと落ちているアイテムを獲得でき、パーティーにも同様の効果をもたらします。最後に、治療師は、自分自身とパーティーの仲間の体力を回復することができます。\n<br><br>\nすぐにクラスを選びたくなければ――たとえば、いまのクラスの装備を買い集めている最中――「後で決める」をクリックし、後から選ぶときは メニュー > クラスを選ぶ で行います。",
"faqQuestion8": "レベル10以降、ヘッダーに表示される青いバーは何ですか?",
"iosFaqAnswer8": "レベル10になってクラスを選択すると表示される青いバーは、マナ バーです。レベルアップを続けると、マナを使う特殊能力の機能がアンロックされます。それぞれのクラスは異なった特殊能力をもっており、レベル11以降、メニュー > 特殊能力を使う に表示されます。体力バーと違って、マナ バーはレベルを上げてもリセットされません。マナは、いい習慣、日課、To-Do を達成することで増え、悪い習慣を行うと減ります。夜が明けたときにも少し回復しますが、それはより多くの日課を完了すると、より回復します。",
"webFaqAnswer8": "レベル10になってクラスを選択すると表示される青いバーは、マナ バーです。レベルアップを続けると、マナを使う特殊能力の機能がアンロックされます。それぞれのクラスは異なった特殊能力をもっており、レベル11以降、「ごほうび」欄の特別な枠に表示されます。体力バーと違って、マナ バーはレベルを上げてもリセットされません。マナは、いい習慣、日課、To-Do を達成することで増え、悪い週間を行うと減ります。夜が明けたときにも少し回復しますが、それはより多くの日課を完了しただけ、より回復します。",
"faqQuestion9": "モンスターと戦ったり、クエストを始めるにはどうしたらいいですか?",
"iosFaqAnswer9": "まず、パーティーに加わるか、新しいパーティーを作るか(上述) する必要があります。一人でモンスターと戦うこともできますが、クエストをずっと簡単にしてくれるので、グループでプレーすることをお勧めします。加えて、タスクを達成するようあなたを応援してくれる友達がいることで、とてもやる気になるからです!\n\n\n次に、クエストの巻物が必要です。メニュー > 所持品 に保管されています。巻物を入手するには3通りの方法があります : \n\n- レベル15 で、3 リンク クエスト として知られる、シリーズ クエストにたどり着きます。その後、レベル 30、40、そして60 のそれぞれで、シリーズ クエストがアンロックされます。\n- だれかをあなたのパーティーに招待すると、バシ・リストの巻物が手に入ります。\n- [website](https://habitica.com/#/options/inventory/quests) のクエストのページで、ゴールドまたはジェムと引き換えにクエストを購入できます。( アプリ版では、この機能は将来の更新で追加されます。 )\n\nボスと戦ったり、コレクション クエストでアイテムを集めたりするには、タスクを通常通り完了するだけです。日付が改められるたびに、ダメージとして計算されます。( ボスの体力バーが減るのを見るには、スクリーンをプル ダウンして、リロードする必要があるでしょう。 ) ボスと戦っている間に日課をやり残すと、ボスへのダメージが発生するタイミングで、ボスからあなた方パーティーへの攻撃によるダメージが発生します。\n\nレベル11以降、魔道士と戦士は、ボスへの追加的なダメージを発生する特殊能力があらわれるので、もし、ボスに対する破壊的な攻撃力を身に着けたいなら、この2つはすばらしいクラスです。レベル10でいずれかを選びましょう。",
"webFaqAnswer9": "まず、パーティーに加わるか、新しいパーティーを作るか( ソーシャル > パーティー ) する必要があります。一人でモンスターと戦うこともできますが、クエストをずっと簡単にしてくれるので、グループでプレーすることをお勧めします。加えて、タスクを達成するようあなたを応援してくれる友達がいることで、とてもやる気になるからです!\n<br><br>\n次に、クエストの巻物が必要です。メニュー > 所持品 に保管されています。巻物を入手するには3通りの方法があります : \n<br><br>\n- だれかをあなたのパーティーに招待すると、バシ・リストの巻物が手に入ります。\n- レベル15 で、シリーズ クエスト(別名 : 3 リンク クエスト) にたどり着きます。その後、レベル 30、40、そして60 のそれぞれで、シリーズ クエストがアンロックされます。\n- [website](https://habitica.com/#/options/inventory/quests) のクエストのページで、ゴールドまたはジェムと引き換えにクエストを購入できます。( アプリ版では、この機能は将来の更新で追加されます。 )\n<br><br>\nボスと戦ったり、コレクション クエストでアイテムを集めたりするには、タスクを通常通り完了するだけです。日付が改められるたびに、ダメージとして計算されます。( ボスの体力バーが減るのを見るには、スクリーンをプル ダウンして、リロードする必要があるでしょう。 ) ボスと戦っている間に日課をやり残すと、ボスへのダメージが発生するタイミングで、ボスからあなた方パーティーへの攻撃によるダメージが発生します。\n<br><br>\nレベル11以降、魔道士と戦士は、ボスへの追加的なダメージを発生する特殊能力があらわれるので、もし、ボスに対する破壊的な攻撃力を身に着けたいなら、この2つはすばらしいクラスです。レベル10でいずれかを選びましょう。",
"faqQuestion10": "ジェムってなに? どうやって手に入れるの?",
"iosFaqAnswer10": "ジェムは、ヘッダのジェムアイコンをクリックすることで、現実のお金で買うことができます。ジェムを買うことで、サイトを運営する資金協力となります。私たちはとてもありがたいことだと思っています!\n\nジェムは直接購入するのに加えて、以下の 3 通りの方法でジェムを増やすことができます : \n\n* [website](https://habitica.com) のチャレンジに勝利する。チャレンジは、別のプレーヤーが ソーシャル > チャレンジ から準備してくれたものです。( アプリ版でのこの機能は将来の更新で追加します! )\n* [website](https://habitica.com/#/options/settings/subscription) から継続的な寄付を行うと、毎月決まった数のジェムをゴールドで購入できるようになります。\n* あなたの特技で Habitica プロジェクトに貢献する。詳しくは wiki ページをご覧ください : [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica)\n\nおぼえておいてほしいことは、ジェムで購入したアイテムには数値的に有利にあるわけではなく、プレーヤーはジェムなしでも、Habitica を楽しむことができるということです!",
"webFaqAnswer10": "ジェムは、ヘッダのジェムアイコンをクリックすることで、[現実のお金で買う](https://habitica.com/#/options/settings/subscription)ことができ、[寄付会員](https://habitica.com/#/options/settings/subscription)はゴールドで買うことができます。寄付するか、現実のお金でジェムを買うことは、サイトを運営する資金協力となります。私たちはとてもありがたいことだと思っています!\n<br><br>\nジェムは直接購入するか寄付会員になるかに加えて、以下の 2 通りの方法でジェムを増やすことができます : \n<br><br>\n* チャレンジに勝利する。チャレンジは、別のプレーヤーが ソーシャル > チャレンジ から準備してくれたものです。\n* あなたの特技で Habitica プロジェクトに貢献する。詳しくは wiki ページをご覧ください : [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica)\n<br><br>\nおぼえておいてほしいことは、ジェムで購入したアイテムには数値的に有利にあるわけではなく、プレーヤーはジェムなしでも、Habitica を楽しむことができるということです!",
"faqQuestion11": "バグを報告したりや機能を要望したりするには、どうしたらいい?",
"iosFaqAnswer11": "バグの報告、新機能の要望したりフィードバック送信したりする場合は、それぞれ ヘルプ > バグを報告する 、ヘルプ > 機能を要望する で私たちに送ってください! あなたの手助けのためにできる限りのことをします。",
"webFaqAnswer11": "バグを報告するには [ ヘルプ > バグを報告する ](https://habitica.com/#/options/groups/guilds/a29da26b-37de-4a71-b0c6-48e72a900dac) で表示されるポイントに従ってください。もし、Habitica にログインできない売位は、ログインの詳細を <a href=\"mailto:admin@habitica.com\">admin@habitica.com</a> に送ってください。ご心配なく、すぐに修正します。\n<br><br>\n機能の要望は Trello で受け付けています。[ヘルプ > 機能を要望する](https://trello.com/c/odmhIqyW/440-read-first-table-of-contents) で表示される説明に従ってください。ジャジャーン!",
"faqQuestion12": "世界のボスと戦うには?",
"iosFaqAnswer12": "世界のボスはキャンプ場に現れる特別なモンスターです。すべてのユーザーは自動的にこのボスと戦うことになっており、すべてのユーザーが達成した日課や特殊能力で、常にボスにダメージを与えます。\n\n通常のクエストに参加しながらでも世界のボスと戦うことができます。あなたがタスクの完了や特殊能力で発生する攻撃は、世界のボスと、パーティーのボスまたはコレクション クエストとの両方にカウントされます。\n\n世界のボスは、あなたにもあなたのアカウントにも一切ダメージを与えません。その代わり、ユーザーたちが消化しそこねた日課に応じて「消耗の一撃」ゲージがたまっていきます。このゲージがいっぱいになると、世界のボスはこのサイトのプレーヤー以外のキャラクター(NPC)の一人に攻撃を加え、そのキャラクターの姿が変わってしまいます。\n\n詳しくは [過去の世界のボス](http://habitica.wikia.com/wiki/World_Bosses) をお読みください。",
"webFaqAnswer12": "世界のボスはキャンプ場に現れる特別なモンスターです。すべてのユーザーは自動的にこのボスと戦うことになっており、すべてのユーザーが達成した日課や特殊能力で、常にボスにダメージを与えます。\n<br><br>\n通常のクエストに参加しながらでも世界のボスと戦うことができます。あなたがタスクの完了や特殊能力で発生する攻撃は、世界のボスと、パーティーのボスまたはコレクション クエストとの両方にカウントされます。\n<br><br>\n世界のボスは、あなたにもあなたのアカウントにも一切ダメージを与えません。その代わり、ユーザーたちが消化しそこねた日課に応じて「消耗の一撃」ゲージがたまっていきます。このゲージがいっぱいになると、世界のボスはこのサイトのプレーヤー以外のキャラクター(NPC)の一人に攻撃を加え、そのキャラクターの姿が変わってしまいます。\n<br><br>\n詳しくは wiki の [過去の世界のボス](http://habitica.wikia.com/wiki/World_Bosses) をお読みください。",
"iosFaqStillNeedHelp": "この中や [Wiki FAQ] (http://habitica.wikia.com/wiki/FAQ) にない質問は、ソーシャル > キャンプ場チャット で聞いてみてください。喜んで手助けします。",
"webFaqStillNeedHelp": "この中や [Wiki FAQ] (http://habitica.wikia.com/wiki/FAQ) にない質問は、[Newbies Guild](https://habitica.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a) で聞いてみてください。喜んで手助けします。"
}
-5
View File
@@ -1,5 +0,0 @@
Do not edit any files in this directory!
For more information read:
https://github.com/HabitRPG/habitrpg/blob/develop/common/locales/README.md
-5
View File
@@ -1,5 +0,0 @@
Do not edit any files in this directory!
For more information read:
https://github.com/HabitRPG/habitrpg/blob/develop/common/locales/README.md
-5
View File
@@ -1,5 +0,0 @@
Do not edit any files in this directory!
For more information read:
https://github.com/HabitRPG/habitrpg/blob/develop/common/locales/README.md
-199
View File
@@ -1,199 +0,0 @@
{
"backgrounds": "Planos de fundo",
"backgrounds062014": "Conjunto 1: Lançado em Junho de 2014",
"backgroundBeachText": "Praia\nLitoral",
"backgroundBeachNotes": "Descanse em uma praia quentinha.",
"backgroundFairyRingText": "Anel das Fadas\nAnel de fada.",
"backgroundFairyRingNotes": "Dance em um anel de fadas.\nDance em um anel de fada.",
"backgroundForestText": "Floresta\nMata.",
"backgroundForestNotes": "Passeie por uma floresta de verão.\nCaminhe por uma floresta de verão.",
"backgrounds072014": "Conjunto 2: Lançado em Julho de 2014\nJogo 2: Lançado em Julho de 2014.",
"backgroundCoralReefText": "Recife de Corais\nBarreira Coralina.",
"backgroundCoralReefNotes": "Nade em um recife de corais.\nNade em uma barreira coralina.",
"backgroundOpenWatersText": "Mar Aberto\nÁguas exteriores.",
"backgroundOpenWatersNotes": "Aproveite o mar aberto.\nAproveitem as águas exteriores.",
"backgroundSeafarerShipText": "Navio Marítimo",
"backgroundSeafarerShipNotes": "Navegue à bordo de um navio marítimo.",
"backgrounds082014": "Conjunto 3: Lançado em Agosto de 2014",
"backgroundCloudsText": "Nuvens",
"backgroundCloudsNotes": "Plane entre as nuvens.",
"backgroundDustyCanyonsText": "Desfiladeiro Árido",
"backgroundDustyCanyonsNotes": "Vague pelo desfiladeiro árido.",
"backgroundVolcanoText": "Vulcão",
"backgroundVolcanoNotes": "Esquente-se dentro de um Vulcão.",
"backgrounds092014": "Conjunto 4: Lançado em Setembro de 2014",
"backgroundThunderstormText": "Tempestade",
"backgroundThunderstormNotes": "Conduza relâmpagos em uma tempestade.",
"backgroundAutumnForestText": "Floresta de Outono",
"backgroundAutumnForestNotes": "Passeie por uma Floresta de Outono.",
"backgroundHarvestFieldsText": "Campos de Colheita",
"backgroundHarvestFieldsNotes": "Cultive seu campo de colheita.",
"backgrounds102014": "Conjunto 5: Lançado em Outubro de 2014",
"backgroundGraveyardText": "Cemitério",
"backgroundGraveyardNotes": "Visite um Cemitério Assustador.",
"backgroundHauntedHouseText": "Casa Mal-Assombrada",
"backgroundHauntedHouseNotes": "Ande com cuidado por uma Casa Mal-Assombrada.",
"backgroundPumpkinPatchText": "Canteiro de Abóboras",
"backgroundPumpkinPatchNotes": "Entalhe o Miserável Jack da Lanterna em um Canteiro de Abóboras.",
"backgrounds112014": "Conjunto 6: Lançado em Novembro de 2014",
"backgroundHarvestFeastText": "Festa da Colheita",
"backgroundHarvestFeastNotes": "Se divirta na Festa da Colheita.",
"backgroundStarrySkiesText": "Céus Estrelados",
"backgroundStarrySkiesNotes": "Contemple os Céus Estrelados.",
"backgroundSunsetMeadowText": "Pôr do Sol do Campo",
"backgroundSunsetMeadowNotes": "Admire um Pôr do Sol no Campo.",
"backgrounds122014": "Conjunto 7: Lançado em Dezembro de 2014",
"backgroundIcebergText": "Iceberg",
"backgroundIcebergNotes": "Flutue sobre um Iceberg.",
"backgroundTwinklyLightsText": "Pisca-piscas de Inverno",
"backgroundTwinklyLightsNotes": "Passeie entre as árvores enfeitadas com luzes festivas.",
"backgroundSouthPoleText": "Pólo Sul",
"backgroundSouthPoleNotes": "Visite o gelado Pólo Sul.",
"backgrounds012015": "Conjunto 8: Lançado em Janeiro de 2015",
"backgroundIceCaveText": "Caverna de Gelo",
"backgroundIceCaveNotes": "Entre numa Caverna de Gelo.",
"backgroundFrigidPeakText": "Pico Gelado",
"backgroundFrigidPeakNotes": "Topo do Pico Gelado.",
"backgroundSnowyPinesText": "Pinheiros da Neve",
"backgroundSnowyPinesNotes": "Refúgio entre Pinheiros da Neve",
"backgrounds022015": "Conjunto 9: Lançado em Fevereiro de 2015",
"backgroundBlacksmithyText": "Forja",
"backgroundBlacksmithyNotes": "Trabalhe na Forja.",
"backgroundCrystalCaveText": "Caverna de Cristal",
"backgroundCrystalCaveNotes": "Explore uma Caverna de Cristal",
"backgroundDistantCastleText": "Castelo Distante",
"backgroundDistantCastleNotes": "Defenda um Castelo Distante.",
"backgrounds032015": "Conjunto 10: Lançado em Março de 2015",
"backgroundSpringRainText": "Chuva de Primavera",
"backgroundSpringRainNotes": "Dance na Chuva da Primavera.",
"backgroundStainedGlassText": "Vitral",
"backgroundStainedGlassNotes": "Admire alguns Vitrais.",
"backgroundRollingHillsText": "Colinas",
"backgroundRollingHillsNotes": "Divirta-se nas Colinas",
"backgrounds042015": "Conjunto 11: Lançado em Abril de 2015",
"backgroundCherryTreesText": "Cerejeiras",
"backgroundCherryTreesNotes": "Admire as Cerejeiras desabrocharem.",
"backgroundFloralMeadowText": "Campo Florido",
"backgroundFloralMeadowNotes": "Faça um piquenique em um Campo Florido.",
"backgroundGumdropLandText": "Terra das Guloseimas",
"backgroundGumdropLandNotes": "Belisque a paisagem da Terra das Guloseimas.",
"backgrounds052015": "Conjunto 12: Lançado em Maio de 2015",
"backgroundMarbleTempleText": "Templo de Mármore",
"backgroundMarbleTempleNotes": "Pose em frente a um Templo de Mármore",
"backgroundMountainLakeText": "Lago da Montanha",
"backgroundMountainLakeNotes": "Molhe seus dedos num Lago da Montanha",
"backgroundPagodasText": "Pagodas",
"backgroundPagodasNotes": "Escale até o topo das Pagodas",
"backgrounds062015": "Conjunto 13: Lançado em Junho de 2015",
"backgroundDriftingRaftText": "Caiaque",
"backgroundDriftingRaftNotes": "Remar um Caiaque.",
"backgroundShimmeryBubblesText": "Bolhas cintilantes",
"backgroundShimmeryBubblesNotes": "Pairar por um mar de Bolhas cintilantes",
"backgroundIslandWaterfallsText": "Cachoeiras da Ilha",
"backgroundIslandWaterfallsNotes": "Piquenique próximo as Cachoeiras da Ilha.",
"backgrounds072015": "Conjunto 14: Lançado em Julho de 2015",
"backgroundDilatoryRuinsText": "Ruínas do Retardo",
"backgroundDilatoryRuinsNotes": "Mergulhe nas Ruínas do Retardo",
"backgroundGiantWaveText": "Onda Gigante",
"backgroundGiantWaveNotes": "Surfe em uma Onda Gigante!",
"backgroundSunkenShipText": "Navio Naufragado",
"backgroundSunkenShipNotes": "Explore um Navio Naufragado.",
"backgrounds082015": "Conjunto 15: Lançado em Agosto de 2015",
"backgroundPyramidsText": "Pirâmides",
"backgroundPyramidsNotes": "Admire as Pirâmides.",
"backgroundSunsetSavannahText": "Savana Pôr-do-Sol",
"backgroundSunsetSavannahNotes": "Caminhe ao longo da Savana Pôr-do-Sol.",
"backgroundTwinklyPartyLightsText": "Pisca-piscas de Festa",
"backgroundTwinklyPartyLightsNotes": "Dance sob os Pisca-piscas de Festa!",
"backgrounds092015": "SET 16: Lançado em Setembro de 2015",
"backgroundMarketText": "Loja Habitica",
"backgroundMarketNotes": "Compre no Mercado de Habitica",
"backgroundStableText": "Estábulo de Habitica",
"backgroundStableNotes": "Observe suas montaria no Estábulo de Habitica",
"backgroundTavernText": "Taverna de Habitica",
"backgroundTavernNotes": "Visite a Taverna de Habitica",
"backgrounds102015": "Conjunto 17: Lançado em Outubro de 2015",
"backgroundHarvestMoonText": "Lua da Colheita",
"backgroundHarvestMoonNotes": "Cacarejo sob a Lua da Colheita",
"backgroundSlimySwampText": "Pântano Pegajoso",
"backgroundSlimySwampNotes": "Se arrastar por Pântano Pegajoso",
"backgroundSwarmingDarknessText": "Escuridão Fervilhante",
"backgroundSwarmingDarknessNotes": "Trema na Escuridão Fervilhante",
"backgrounds112015": "SET 18: Lançado em Novembro de 2015",
"backgroundFloatingIslandsText": "Ilhas Flutuantes",
"backgroundFloatingIslandsNotes": "Saltite nas Ilhas Flutuantes.",
"backgroundNightDunesText": "Dunas Noturnas",
"backgroundNightDunesNotes": "Caminhar calmamente pelas Dunas à Noite",
"backgroundSunsetOasisText": "Oasis do pôr do sol",
"backgroundSunsetOasisNotes": "Corar no Oásis Pôr de Sol",
"backgrounds122015": "Conjunto 19: Lançado em Dezembro de 2015",
"backgroundAlpineSlopesText": "Alpes Montanhosos",
"backgroundAlpineSlopesNotes": "Esquie nos Alpes Montanhosos",
"backgroundSnowySunriseText": "Aurora nevada",
"backgroundSnowySunriseNotes": "Aprecie a Aurora Nevada",
"backgroundWinterTownText": "Cidade do Inverno",
"backgroundWinterTownNotes": "Divirta-se na Cidade do Inverno",
"backgrounds012016": "Conjunto 20: Lançado em Janeiro de 2016",
"backgroundFrozenLakeText": "Lago Congelado",
"backgroundFrozenLakeNotes": "Ande de skate no Lago Congelado.",
"backgroundSnowmanArmyText": "Exército de Bonecos de neve",
"backgroundSnowmanArmyNotes": "Liderar o Exército de Bonecos de neve.",
"backgroundWinterNightText": "Noite de Inverno",
"backgroundWinterNightNotes": "Olhe para as estrelas em uma noite de inverno.",
"backgrounds022016": "Conjunto 21: Lançado em Fevereiro de 2016",
"backgroundBambooForestText": "Floresta de Bambu",
"backgroundBambooForestNotes": "Passeie pela Floresta de Bambu",
"backgroundCozyLibraryText": "Biblioteca Aconchegante",
"backgroundCozyLibraryNotes": "Leia na Biblioteca Aconchegante",
"backgroundGrandStaircaseText": "Grande Escadaria",
"backgroundGrandStaircaseNotes": "Descer pela Grande Escadaria",
"backgrounds032016": "Conjunto 22: Lançado em Março de 2016",
"backgroundDeepMineText": "Mina Profunda",
"backgroundDeepMineNotes": "Encontre metais preciosos na Mina Profunda.",
"backgroundRainforestText": "Floresta Tropical",
"backgroundRainforestNotes": "Aventure-se em uma Floresta Tropical.",
"backgroundStoneCircleText": "Círculo de Pedras",
"backgroundStoneCircleNotes": "Lançar feitiços em um Círculo de Pedras.",
"backgrounds042016": "Conjunto 23: Lançado em Abril de 2016",
"backgroundArcheryRangeText": "Campo de tiro com arco",
"backgroundArcheryRangeNotes": "Praticar no campo de tiro com arco.",
"backgroundGiantFlowersText": "Flores gigantes",
"backgroundGiantFlowersNotes": "Divirta-se em cima de Flores Gigantes.",
"backgroundRainbowsEndText": "Final do arco-íris.",
"backgroundRainbowsEndNotes": "Descubra ouro no final do arco-íris",
"backgrounds052016": "Conjunto 24: Lançado em Maio de 2016",
"backgroundBeehiveText": "Colmeia",
"backgroundBeehiveNotes": "Faça zumbidos e dance em uma colméia.",
"backgroundGazeboText": "Gazebo",
"backgroundGazeboNotes": "Enfrente um Gazebo.",
"backgroundTreeRootsText": "Raízes da árvore",
"backgroundTreeRootsNotes": "Explore as Raízes da Árvore.",
"backgrounds062016": "Conjunto 25: Lançado em Junho de 2016",
"backgroundLighthouseShoreText": "Farol da Costa",
"backgroundLighthouseShoreNotes": "Passeie pelo Farol da Costa.",
"backgroundLilypadText": "Vitória Régia",
"backgroundLilypadNotes": "Suba em uma Vitória Régia.",
"backgroundWaterfallRockText": "Pedra da Cachoeira",
"backgroundWaterfallRockNotes": "Se molhe na Pedra da Cachoeira.",
"backgrounds072016": "Conjunto 26: Lançado em Julho 2016",
"backgroundAquariumText": "Aquário",
"backgroundAquariumNotes": "Bob em um Aquário.",
"backgroundDeepSeaText": "Mar Profundo",
"backgroundDeepSeaNotes": "Mergulhe no Mar Profundo.",
"backgroundDilatoryCastleText": "Castelo do Retardo",
"backgroundDilatoryCastleNotes": "Nade até depois do Castelo do Retardo",
"backgrounds082016": "Conjunto 27: Lançado em Agosto de 2016",
"backgroundIdyllicCabinText": "Cabana Bucólica",
"backgroundIdyllicCabinNotes": "Volte para uma Cabana Bucólica.",
"backgroundMountainPyramidText": "Montanha Pirâmide",
"backgroundMountainPyramidNotes": "Suba os muitos degraus da Montanha Pirâmide.",
"backgroundStormyShipText": "Navio da Tempestade",
"backgroundStormyShipNotes": "Segure-se contra o vento e as ondas abordo do Navio da Tempestade!",
"backgrounds092016": "Conjunto 28: Lançado em Setembro de 2016",
"backgroundCornfieldsText": "Milharais",
"backgroundCornfieldsNotes": "Aproveite um lindo dia nos Milharais",
"backgroundFarmhouseText": "Casa da Fazenda",
"backgroundFarmhouseNotes": "Diga olá para os animais em seu caminho para a Fazenda.",
"backgroundOrchardText": "Pomar",
"backgroundOrchardNotes": "Colha os frutos em um Pomar."
}
-345
View File
@@ -1,345 +0,0 @@
{
"questEvilSantaText": "Noel Caçador",
"questEvilSantaNotes": "Você escuta rugidos de agonia ao fundo dos Campos de Gelo. Você segue os rugidos - pontuados por um som de cacarejo - até uma clareira na floresta, onde você vê uma urso polar adulta. Ela se encontra enjaulada e acorrentada, lutando pela própria vida. Dançando em cima da jaula está um maldoso duende vestido com roupas que alguém não quis mais. Derrote o Noel Caçador e salve a fera!",
"questEvilSantaCompletion": "Noel Caçador guincha de raiva e salta noite adentro. A agradecida ursa, com rugidos e rosnados, tenta te contar algo. Você a leva de volta aos estábulos, onde Matt Boch, o Mestre das Bestas, escuta o que ela diz com uma expressão de horror. Ela tem um filhote! Ele fugiu para os campos de gelo quando a mamãe ursa foi capturada.",
"questEvilSantaBoss": "Noel Caçador",
"questEvilSantaDropBearCubPolarMount": "Urso Polar (Montaria)",
"questEvilSanta2Text": "Encontre a Filhote",
"questEvilSanta2Notes": "Quando o Noel Caçador capturou a montaria de urso polar, seu filhote fugiu para os campos de gelo. Você ouve galhos quebrando e passos na neve pelo som cristalino da floresta. Pegadas! Você começa a correr para seguir a trilha. Encontre todas as pegadas e galhos quebrados, e encontre o filhote!",
"questEvilSanta2Completion": "Você encontrou o filhote! Ele te fará companhia pra sempre.",
"questEvilSanta2CollectTracks": "Trilhas",
"questEvilSanta2CollectBranches": "Galhos Partidos",
"questEvilSanta2DropBearCubPolarPet": "Urso Polar (Mascote)",
"questGryphonText": "O Grifo Flamejante",
"questGryphonNotes": "O grandioso senhor das bestas, <strong>baconssauro</strong> veio ao seu grupo em busca de ajuda. \"Por favor, aventureiros, vocês precisam me ajudar! Minha estimada grifo fêmea escapou e está aterrorizando a Cidade dos Hábitos! Se vocês puderem pará-la, eu poderia recompensá-los com alguns de seus ovos!\"",
"questGryphonCompletion": "Derrotada, a poderosa besta volta para o seu mestre, envergonhada. \"Pelas barbas! Bom trabalho, aventureiros!\" <strong>baconssauro</strong> exclama, \"Por favor, levem alguns dos ovos do grifo. Tenho certeza que irão criar bem estes pequenos!\"",
"questGryphonBoss": "Grifo Flamejante",
"questGryphonDropGryphonEgg": "Grifo (Ovo)",
"questGryphonUnlockText": "Desbloqueia ovos de Grifo para compra no Mercado",
"questHedgehogText": "O Monstrouriço",
"questHedgehogNotes": "Ouriços são um grupo engraçado de animais. Eles são alguns dos mascotes mais carinhosos que um Habiticano(a) pode ter. Mas diz a lenda que, se você os der leite após a meia noite, eles ficam bastante irritados. E cinquenta vezes seu tamanho. E <strong>Inventrix</strong> acabou de fazer isso. Ooopa.",
"questHedgehogCompletion": "Sue grupo conseguiu acalmar a ouriço! Depois de diminuir ao tamanho normal, ela manca até seus ovos. Ela volta rangendo e empurrando alguns de seus ovos para seu grupo. Esperamos que esses ouriços prefiram leite!",
"questHedgehogBoss": "Monstrouriço",
"questHedgehogDropHedgehogEgg": "Ouriço (Ovo)",
"questHedgehogUnlockText": "Desbloqueia ovos de Ouriço para compra no Mercado",
"questGhostStagText": "O Espírito da Primavera",
"questGhostStagNotes": "Ahh, Primavera. A época do ano quando a cor começa, mais uma vez, a pintar a paisagem. Já se foram as montanhas geladas de neve do inverno. Onde a geada uma vez estava, plantas vibrantes cheias de vida tomaram seu lugar. Belas folhas verdes preenchem as árvores, a grama retorna à sua tonalidade vívida, um arco-íris de flores nasce junto às planícies e uma mística névoa branca cobre a região! ... Espere. Névoa Mística? \"Oh não,\" <strong>Inventrix</strong> diz apreensivamente, \"Parece que algum tipo de espírito é a causa deste nevoeiro. Ah, e ele está indo em sua direção.\"",
"questGhostStagCompletion": "O espírito, aparentemente sem ferimentos, abaixa seu focinho até o chão. Uma voz calma envolve seu grupo. \"Desculpe pelo meu comportamento. Acabei de acordar do meu descanso e parece que meu raciocínio não voltou completamente. Por favor, aceite isso como meu pedido de desculpas.\" Um conjunto de ovos se materializa na grama em frente ao espírito. Sem mais palavras, o espírito desaparece na floresta com flores caindo sobre seu rastro.",
"questGhostStagBoss": "Cervo Espírito",
"questGhostStagDropDeerEgg": "Cervo (Ovo)",
"questGhostStagUnlockText": "Desbloqueia ovos de Cervo para compra no Mercado",
"questRatText": "O Rei Rato",
"questRatNotes": "Lixo! Enormes pilhas de Diárias incompletas pairam por todo o Habitica. O problema se tornou tão sério que hordas de ratos são vistas por todo o lugar. Você repara @Pandah acariciando uma das criaturas amavelmente. Ela explica que ratos são criaturas gentis que se alimentam de Diárias incompletas. \nO verdadeiro problema é que as tarefas caíram dentro do esgoto, criando um perigoso buraco que deve ser limpo. A medida que você desce o esgoto, um rato gigantesco, de olhos vermelhos de sangue e dentes amarelos desfigurados te ataca, defendendo sua horda. Você se encolherá de medo ou enfrentará o lendário Rei Rato?",
"questRatCompletion": "Seu golpe final esgota a força do rato gigantesco, seus olhos desvanecem para um cinza desbotado. A besta divide-se em muitos pequenos ratos, que fogem de medo. Você repara @Pandah parada atrás de você, olhando para o que antes fora uma poderosa criatura. Ela explica que os cidadãos de Habitica foram inspirados por sua coragem e rapidamente estão completando todas suas Diárias não realizadas. Ela o alerta que devemos ser vigilantes pois se abaixarmos a guarda, o Rei Rato pode retornar. Como pagamento, @Pandah lhe oferece diversos ovos de ratos. Percebendo sua expressão receosa, ela sorri, \"Eles são ótimos mascotes.\"",
"questRatBoss": "Rei Rato",
"questRatDropRatEgg": "Rato (Ovo)",
"questRatUnlockText": "Desbloqueia ovos de Rato para compra no Mercado",
"questOctopusText": "O Chamado de Octothulu",
"questOctopusNotes": "@Urse, um apaixonado jovem escriba pediu sua ajuda para explorar a caverna misteriosa próxima da praia. Por entre o crepúsculo das marés há um enorme portão de estalactites e estalagmites. À medida que se aproximam do portão, um redemoinho negro começa a rodear sua base. Você fixa seu olhar com admiração no que parecia ser um dragão com tentáculos de polvo surgindo do seu interior. \"O pegajoso das estrelas acordou,\" grita @Urse loucamente. \"Após vigintilhões de anos, o grande Octothulu está solto outra vez e sedento de fome!\"",
"questOctopusCompletion": "Com o golpe final, a criatura desliza de volta para o redemoinho de onde saiu. Você não consegue dizer se @Urse está feliz com sua vitória ou entristecido de ver a besta ir. Sem palavras, seu companheiro aponta para três gigantescos ovos viscosos numa poça de maré próxima, sob um ninho de moedas de ouro. \"Provavelmente são só ovos de polvo,\" você diz com nervosismo. Na sua volta para casa, @Urse escreve freneticamente num diário e você suspeita que não será a ultima vez que escutará sobre o grande Octothulu.",
"questOctopusBoss": "Octothulu",
"questOctopusDropOctopusEgg": "Polvo (Ovo)",
"questOctopusUnlockText": "Desbloqueia ovos de Polvo para compra no Mercado",
"questHarpyText": "Socorro! Harpia!",
"questHarpyNotes": "O bravo aventureiro @UncommonCriminal desapareceu na floresta, seguindo a trilha de um monstro alado que foi visto há alguns dias atrás. Você está prestes a começar uma busca onde uma arara ferida pousa em seu ombro com uma horrível cicatriz arruinando sua bela plumagem. Preso à sua perna está um bilhete rabiscado explicando que enquanto defendia as araras, @UncommonCriminal foi capturado por uma perversa Harpia e precisa desesperadamente de sua ajuda para escapar. Irá você seguir a ave, derrotar a Harpia e salvar @UncommonCriminal?",
"questHarpyCompletion": "Um golpe fatal derrubou a harpia, com penas voando em todas as direções. Após uma rápida escalada em seu ninho você encontra o @UncommonCriminal cercado de ovos de arara. Como um time, vocês rapidamente colocam os ovos de volta em seus ninhos próximos. A arara assustada que lhe encontrou grasna alto, soltando diversos ovos em seus braços. \"O ataque da Harpia deixou alguns ovos precisando de proteção\", explica @UncommonCriminal. \"Parece que você se tornou uma arara honorária\".",
"questHarpyBoss": "Harpia",
"questHarpyDropParrotEgg": "Arara (Ovo)",
"questHarpyUnlockText": "Desbloqueia ovos de Papagaio para compra no Mercado",
"questRoosterText": "O Galo Raivoso",
"questRoosterNotes": "Por anos o fazendeiro @extrajordanary usou Galos como despertadores. Mas agora um Galo gigante apareceu, cantando mais alto do que nunca - e acordando todo mundo no Habitica! Os Habiticanos com privação de sono lutam por suas Diárias. @Pandoro decide que a hora de dar um basta nisso chegou. \"Por favor, tem alguém que possa ensinar esse Galo a cantar baixo?\" Você se voluntaria, aproximando-se do Galo cedo da manhã - mas ele se vira, batendo suas asas gigantes e mostrando suas garras afiadas e soltando um grito de guerra.",
"questRoosterCompletion": "Com força e sutileza, você domou a besta selvagem. Suas orelhas, antes cheias de penas e de tarefas meio esquecidas, agora estão limpas como o dia. Ele canta agora silenciosamente, encostando o bico no seu ombro. No dia seguinte você está pronto para ir embora, mas @EmeraldOx corre atrás de você com uma cesta coberta. \"Espere! Eu fui até a casa do fazendeiro esta manhã, o Galo colocou isto na porta de onde você dormiu. Acho que ele quer que você fique com eles.\" Você abre a cesta e vê três delicados ovos.",
"questRoosterBoss": "Galo",
"questRoosterDropRoosterEgg": "Galo (Ovo)",
"questRoosterUnlockText": "Desbloqueia ovos de Galo para compra no Mercado",
"questSpiderText": "O Aracnídeo de Gelo",
"questSpiderNotes": "Conforme o tempo vai gelando, uma delicada geada começa a aparecer nas vidraças Habiticanas em forma de teias em laços... com exceção de @Arcosine, cujas janelas estão completamente congeladas pela Aranha de Gelo que atualmente usa sua casa como seu covil. Ó, céus.",
"questSpiderCompletion": "A Aranha de Gelo cai, deixando para trás pilhas de gelo e alguns de seus sacos de ovos encantados. @Arcosine rapidamente lhe oferece eles como uma recompensa - talvez você possa criar algumas aranhas como mascotes inofensivos seus?",
"questSpiderBoss": "Aranha",
"questSpiderDropSpiderEgg": "Aranha (Ovo)",
"questSpiderUnlockText": "Desbloqueia ovos de Aranha para compra no Mercado",
"questVice1Text": "Vício, Parte 1: Liberte-se do Controle do Dragão",
"questVice1Notes": "Os rumores dizem que um mal horrível vive nas cavernas da montanha Habitica. Um monstro cuja presença corrompe a mente dos heróis mais fortes da terra, levando-os a maus hábitos e preguiça! A besta é um grande dragão de poder imenso e composto pelas próprias sombras: Vício, o traiçoeiro Dragão das Sombras. Bravos Habiticanos, se acreditam que podem sobreviver a este poder imenso, peguem as suas armas e derrotem esta besta imunda de uma vez por todas. </p><h3> Vício, Parte 1: </h3><p>Como podem pensar que podem lutar contra a besta se ela já tem controle sobre vocês? Não sejam vítimas da preguiça e do vício! Trabalhem arduamente contra a influência negra do dragão e libertem-se da influência que ele tem sobre vocês!</p>",
"questVice1Boss": "A Sombra do Vício",
"questVice1DropVice2Quest": "Vício, Parte 2 (Pergaminho)",
"questVice2Text": "Vício, Parte 2: Encontre o Covil do Dragão",
"questVice2Notes": "Com a influência de Vício sob você dissipada, você sente uma onda de força que não sabia que tinha voltar para você. Confiante em você mesmo e em sua habilidade de resistir a influência do dragão, seu grupo consegue chegar até Monte Habitica. Você se aproxima da entrada das cavernas da montanha e para. Sombras, quase como nuvens, saem da abertura. É quase impossível enxergar qualquer coisa à sua frente. A luz das lanternas parecem acabar abruptamente onde a escuridão começa. Dizem que apenas luz mágica pode atravessar a neblina infernal do dragão. Se conseguirem encontrar cristais de luz suficientes, poderão encontrar o caminho até o dragão.",
"questVice2CollectLightCrystal": "Cristais de Luz",
"questVice2DropVice3Quest": "Vício, Parte 3 (Pergaminho)",
"questVice3Text": "Vício, Parte 3: O Despertar do Vício",
"questVice3Notes": "Depois de muito esforço, seu grupo descobriu o covil do Vício. O poderoso monstro olha seu grupo à distância. Conforme a escuridão o cerca, uma voz sussurra na sua cabeça, \"Mais cidadãos tolos de Habitica vieram me parar? Que fofo. Teria sido inteligente não virem.\" O titã escamoso recua sua cabeça e se prepara para atacar. Essa é sua chance! Dê tudo de si e derrote o Vício de uma vez por todas!",
"questVice3Completion": "As sombras dissipam-se da caverna e um silêncio metálico surge. Não acredito, você conseguiu! Vício foi derrotado! Você e seu grupo podem finalmente suspirar em alívio. Aproveite sua vitória, bravos Habiticanos, mas tomem a lição que aprenderam batalhando Vício e sigam em frente. Ainda há hábitos a serem feitos e potencialmente piores males para serem conquistados!",
"questVice3Boss": "Vício, o Dragão Sombrio",
"questVice3DropWeaponSpecial2": "Mastro do Dragão de Stephen Weber",
"questVice3DropDragonEgg": "Dragão (Ovo)",
"questVice3DropShadeHatchingPotion": "Poção de Choca Sombra",
"questMoonstone1Text": "Recaída, Parte 1: A Corrente de Pedras da Lua",
"questMoonstone1Notes": "Uma doença terrível atingiu os Habiticanos. Maus hábitos que achávamos estarem mortos a muito tempo estão voltando à vida para vingança. Louças ficam sujas, livros esquecidos e a procrastinação vem com violência! <br><br>Você segue alguns de seus velhos Maus Hábitos até os Pântanos da Estagnação e descobre o culpado: Recaída, a Necromante! Você avança para atacá-la com armas em mãos mas as armas passam direto pelo espectro dela.<br><br>\"Nem tente\", ela fala baixinho com a voz rouca. \"Sem uma corrente de pedras da lua, nada pode me machucar - e joalheiro @aurakami espalhou todas as pedras da lua por toda a Habitica a muito tempo atrás!\" Ofegante, você foge... mas você sabe o que precisa fazer.",
"questMoonstone1CollectMoonstone": "Pedras da Lua",
"questMoonstone1DropMoonstone2Quest": "Recaída, Parte 2: Recaída, a Necromante (Pergaminho)",
"questMoonstone2Text": "Recaída, Parte 2: Recaída, a Necromante",
"questMoonstone2Notes": "O bravo ferreiro @inventrix te ajuda a forjar as pedras da lua encantadas em uma corrente. Você, finalmente, está pronto(a) para enfrentar Recaída, mas ao entrar no Pântano da Estagnação, você sente um arrepio terrível por todo seu corpo.<br><br> Um hálito podre sussurra no seu ouvido. \"De volta aqui? Mas que prazeroso... \" Você se vira e ataca e, sobre a luz da corrente de pedras da lua, sua arma acerta carne de verdade. \"Você pode ter me trazido de volta ao mundo mais uma vez,\" Recaída rosna, \"mas agora é a hora de você deixar esse mundo!\"",
"questMoonstone2Boss": "O Necromante",
"questMoonstone2DropMoonstone3Quest": "Recaída, Parte 3: Recaída Transformada (Pergaminho)",
"questMoonstone3Text": "Recaída, Parte 3: Recaída Transformada",
"questMoonstone3Notes": "\nRecaída desaba no chão e você a atinge com a corrente de pedras da lua. Para seu horror, Recaída agarra as gemas com os olhos brilhando em triunfo.<br><br>\"Sua criatura de carne idiota!\", ela grita. \"Essas pedras da lua vão recuperar a minha forma física, é verdade, mas não como você imaginou. Assim como a lua cheia cresce na escuridão, também o meu poder floresce e das sombras eu invoco o espectro do teu inimigo mais temido!\"<br><br>Um nevoeiro verde ergue-se do pântano e o corpo de Recaída, contorcendo-se e tomado de espasmos transforma-se em algo que te enche de terror - o corpo morto-vivo do Vício, horrivelmente renascido.",
"questMoonstone3Completion": "É difícil respirar e o suor arde em seus olhos enquanto o morto-vivo cai no chão. Os restos de Recaída se dissipam numa fina névoa que desaparece rapidamente pela ação de uma briza refrescante. E você ouve gritos de combate de Habiticanos derrotando seus Maus Hábitos de uma vez por todas.<br><br> @Baconsaur, o Mestre das Bestas desce de um grifo. \"Eu vi o fim de sua batalha do céu e fiquei bastante comovido. Por favor, aceite esta túnica encantada - sua bravura é de um coração nobre e eu acredito que você foi feito para recebê-la.\"",
"questMoonstone3Boss": "Necro-Vício",
"questMoonstone3DropRottenMeat": "Carne Estragada (Comida)",
"questMoonstone3DropZombiePotion": "Poção de Choca Zumbi",
"questGoldenknight1Text": "A Cavaleira Dourada, Parte 1: Uma conversa séria",
"questGoldenknight1Notes": "A Cavaleira Dourada tem estado a meter-se com os pobres Habiticanos. Não cumpriste todas as tuas Diárias? Deste parte de um Hábito negativo? Ela vai usar isso como razão para te chatear acerca de como deverias seguir o seu exemplo. Ela é o exemplo perfeito de um Habiticano perfeito e tu nada mais que um falhanço. Pois bem, isso não é nada simpático!! Toda a gente faz erros e não deveriam ter de ser submetidos a tanto negativismo por tal. Talvez seja altura de recolher alguns testemunhos de Habiticanos que também tenham sofrido às suas mãos e ter uma conversa séria com a Cavaleira Dourada!",
"questGoldenknight1CollectTestimony": "Testemunhos",
"questGoldenknight1DropGoldenknight2Quest": "O Cavaleiro Dourado Parte 2: Cavaleiro Dourado (Pergaminho)",
"questGoldenknight2Text": "A Cavaleira Dourada, Parte 2: Cavaleira Dourada",
"questGoldenknight2Notes": "Armado(a) com centenas de testemunhos de habiticanos, você finalmente confronta a Cavaleira Dourada. Você começa a recitar as reclamações de habiticanos para ela, uma a uma. \"E @Pfeffernusse diz que a sua constante fanfarronada-\" A Cavaleira levanta sua mão para te silenciar e zomba, \"Por favor, essas pessoas estão meramente com inveja do meu sucesso. Ao invés de reclamar, elas deveriam simplesmente se esforçar tanto quanto eu! Talvez eu deva mostrar-lhes o poder que vocês podem alcançar através de uma diligência como o meu!\" Ela levanta sua maça e se prepara para te atacar!",
"questGoldenknight2Boss": "Cavaleira Dourada",
"questGoldenknight2DropGoldenknight3Quest": "O Cavaleiro Dourado Parte 3: O Cavaleiro de Ferro (Pergaminho)",
"questGoldenknight3Text": "A Cavaleira Dourada, Parte 3: O Cavaleiro de Ferro",
"questGoldenknight3Notes": "@Jon Arinbjorn grita para conseguir sua atenção. Após a sua batalha, uma nova figura apareceu. Um cavaleiro coberto por ferro escurecido lentamente se aproxima de você com espada em mãos. A Cavaleira Dourada grita para a figura \"Pai, não!\", mas o cavaleiro não mostra sinais de parar. Ela se vira para você e diz \"Me desculpe, eu fui uma tola, com uma cabeça grande demais para ver quão cruel eu tenho sido. Mas meu pai é mais cruel do que eu jamais poderia ser. Se ele não for parado, ele nos destruirá a todos. Aqui, use minha maça e pare o Cavaleiro de Ferro!\"",
"questGoldenknight3Completion": "Com um retinir gratificante, o Cavaleiro de Ferro cai de joelhos e cai. \"Você é bem forte\", ele ofega. \"Eu fui humilhado, hoje.\" A Cavaleira Dourada se aproxima de você e diz, \"Obrigada. Eu acredito que tenhamos ganho um pouco de humildade do nosso encontro com você. Eu conversarei com meu pai e explicarei as reclamações contra nós, Talvez nós devêssemos começar a nos desculpar com os outros habiticanos.\" Ela reflete em considerações antes de se voltar para você novamente. \"Aqui: como um presente nosso para você, eu quero que você fique com a minha maça. Ela é sua agora.\"",
"questGoldenknight3Boss": "O Cavaleiro de Ferro",
"questGoldenknight3DropHoney": "Mel (Comida)",
"questGoldenknight3DropGoldenPotion": "Poção de Choca Dourada",
"questGoldenknight3DropWeapon": "Maça-Estrela Esmagadora de Marcos do Mustaine (Arma para mão do escudo)",
"questBasilistText": "A Basi-Lista",
"questBasilistNotes": "Há uma comoção no mercado -- do tipo que deveria fazer você fugir. Sendo o corajoso aventureiro que é, você corre para lá, ao invés, e descobre a Basi-Lista, misturada a um torrão de afazeres incompletos! Habiticanos próximos estão paralizados com medo do tamanho da Basi-lista, incapazes de começar a trabalhar. De algum lugar próximo você ouve @Arcosine gritar: \"Rápido! Complete as suas Diárias e afazeres para minar o monstro, antes que ele cause um corte de papel em alguém!\" Ataque rápido, aventureiro, e marque algo como feito - mas cuidado! Se deixar alguma Diária por fazer, a Basi-Lista vai atacar você e seu grupo!",
"questBasilistCompletion": "A Basi-lista se dispersou em retalhos de papel, que brilhavam suavemente em cores de arco-íris. \"Ufa!\" diz @Arcosline. \"Ainda bem que vocês estavam aqui!\" Sentindo-se mais experiente do que antes, você recolhe um pouco de ouro de entre os papéis.",
"questBasilistBoss": "A Basi-Lista",
"questEggHuntText": "Caça ao Ovo",
"questEggHuntNotes": "Durante a noite, estranhos ovos simples apareceram em todo o lado: no estábulo do Matt, atrás do balcão na Taverna e até no meio dos ovos de mascotes no Mercado! Que incômodo! \"Ninguém sabe de onde eles vieram, ou no que eles chocarão\", diz <strong>Megan</strong>, \"mas nós não podemos simplesmente deixá-los espalhados por aí! Trabalhe duro procurando e me ajude a juntar esses ovos misteriosos. Talvez se você juntar ovos suficientes, poderão sobrar alguns para você...\"",
"questEggHuntCompletion": "Você conseguiu! Em gratidão, <strong>Megan</strong> te dá dez ovos. \"Aposto que as poções de choca vão pintá-los de cores lindas! Imagino o que vai acontecer quando eles virarem montarias...\"",
"questEggHuntCollectPlainEgg": "Ovos Simples",
"questEggHuntDropPlainEgg": "Ovo Simples",
"questDilatoryText": "O Terrível Dragão de Dilatória",
"questDilatoryNotes": "Devíamos ter escutado os avisos.<br><br>Olhos brilhantes mas escuros. Escamas antigas. Mandíbulas gigantes com dentes à mostra. Acordámos algo horrífico na fenda: <strong> o Temível Arrasta'dor de Lentidão!</strong> Habiticanos fugiram em todas as direcções, berrando, quando saiu do mar, o seu terrível pescoço longo esticado ao longo de centenas de metros acima da água enquanto estilhaçava janelas com o seu rugir estridente.<br><br>\"Isto tem de ser o que levou Lentidão à perdição!\" grita Lemoness. \"Não foram as tarefas negligenciadas - as Diárias em vermelho escuro simplesmente atraíram a sua atenção!\"<br><br>\"Está cheio de energia mágica!\" grita @Baconsaur. \"Para ter vivido todo este tempo, deve ser capaz de se regenerar! Como podemos derrotá-lo?\"<br><br>Da mesma forma como derrotamos todas as bestas - com productividade! Depressa Habitica, como uma única força, terminem todas as vossas tarefas e juntos combataremos este monstro. (Não é necessário abandonar demandas anteriores - acreditamos na tua capacidade de duplo-ataque!) Não nos atacará individualmente mas, quantas mais Diárias ignorarmos, mais próximo ficará de despoletar o seu Ataque de Negligência - e não gosto da forma como está a olhar para a taverna...",
"questDilatoryBoss": "O Terrível Dragão de Dilatória",
"questDilatoryBossRageTitle": "Ataque de Negligência",
"questDilatoryBossRageDescription": "Quando esta barra estiver cheia, o Terrível Dragão de Dilatória liberará uma grande devastação sob a terra de Habitica",
"questDilatoryDropMantisShrimpPet": "Camarão Mantis (Mascote)",
"questDilatoryDropMantisShrimpMount": "Camarão Mantis (Montaria)",
"questDilatoryBossRageTavern": "`O Terrível Dragão lança seu ATAQUE DE NEGLIGÊNCIA!`\n\nOh não! Apesar de nossos melhores esforços, nós deixamos algumas Diárias fugirem, e sua cor vermelho-escura atraiu a raiva do Dragão! Com seu temível Ataque de Negligência, ele dizimou a Taverna! Felizmente, nós criamos outra numa cidade próxima, e você está livre para continuar conversando na praia... mas o pobre Daniel, o dono do bar, viu seu amado estabelecimento desmoronar ao seu redor!\n\nEu espero que a fera não ataque novamente!",
"questDilatoryBossRageStables": "`O Terrível Dragão lança seu ATAQUE DE NEGLIGÊNCIA!`\n\nYikes! Mais uma vez, nós deixamos algumas Tarefas por fazer. O Dragão liberou o seu Ataque de Negligência contra o Matt e os estábulos! O animais de estimação estão fugindo em todas as direções. Felizmente parece que todos os seus estão seguros!\n\nPobre Habitica! Eu espero que não aconteça novamente. Apressem-se e façam todas as suas tarefas!",
"questDilatoryBossRageMarket": "`O Terrível Dragão lança seu ATAQUE DE NEGLIGÊNCIA!`\n\nAhhh!! Alex, o comerciante, teve sua loja feita em pedaços pelo Ataque de Negligência do Dragão! Mas parece que estamos realmente desgastando a besta. Eu duvido que ela tenha energia suficiente para outro ataque.\n\nPortanto, não vacile, Habitica! Vamos empurrar esta besta para longe de nossas costas!",
"questDilatoryCompletion": "`A Derrota do Terrível Dragão de Dilatória` \n \nNós conseguimos! Com um último rugido final, o Terrível Dragão desmorona e nada pra longe, muito longe. Multidões de Habiticanos aplaudindo se alinham às margens! Nós ajudamos Matt, Daniel e Alex a reconstruir seus estabelecimentos. Mas o que é isso?\n \n`O Retorno dos Cidadãos!`\n\n Agora que o Dragão fugiu, milhares de cores cintilantes estão ascendendo pelo do mar. É um enxame arco-íris de Camarão Mantis... e entre eles, centenas de pessoas sereias!\n\n \"Nós somos os cidadãos perdidos de Dilatória!\" explica o seu líder, Manta. \"Quando Dilatória afundou, o Camarão Mantis que vivia nestas águas usou um feitiço para nos transformar em pessoas sereias para que pudéssemos sobreviver. Mas em sua fúria, o Terrível Dragão nos prendeu na fenda escura. Nós ficamos presos lá por centenas de anos - mas agora, finalmente, estamos livres para reconstruir nossa cidade!\"\n\n\"Como um agradecimento,\" diz seu amigo @Ottl, \"Por favor, aceite este mascote Camarão Mantis e montaria Camarão Mantis, bem como experiência, ouro e nossa eterna gratidão. \"\n\n` Recompensas `\n* Mascote Camarão Mantis\n* Montaria Camarão Mantis\n* Chocolate, Algodão Doce Azul, Algodão Doce Rosa, Peixe, Mel, Carne, Leite, Batata, Carne Podre, Morango",
"questSeahorseText": "A Corrida de Cavalos Marinhos de Dilatória",
"questSeahorseNotes": "É dia de corrida, e os Habiticanos de todo o continente vieram até Dilatória para correr com os seus cavalos-marinhos mascotes! De repente, um grande barulho na água e relinchos irrompem na pista, e você ouve a Treinadora de Cavalos-Marinhos @Kiwibot gritar sob o barulho das ondas. \"O encontro de cavalos marinhos atraiu um feroz Alazão Marinho!\" ela chora. \"Ele está esmagando os estábulos e destruindo a antiga pista! Alguém pode acalmá-lo?\"",
"questSeahorseCompletion": "O agora manso Alazão Marinho nada docilmente ao seu lado. \"Oh, olhe!\" Kiwibot diz. \"Ele quer que nós cuidemos de seus filhos.\" Ela lhe dá três ovos. \"Crie-os bem\", diz ela. \"Você será sempre bem-vindo na Corrida de Cavalos Marinhos de Dilatória!\"",
"questSeahorseBoss": "Alazão Marinho",
"questSeahorseDropSeahorseEgg": "Cavalo-Marinho (Ovo)",
"questSeahorseUnlockText": "Desbloqueia ovos de Cavalo-marinho para compra no Mercado",
"questAtom1Text": "Ataque do Mundano, Parte 1: Desastre em Louça!",
"questAtom1Notes": "Você chegou às margens do Lago Lavado para um relaxamento merecido... Mas o lago está poluído com pratos sujos! Como isso aconteceu? Bem, você simplesmente não pode permitir que o lago continue neste estado. Há apenas uma coisa que você pode fazer: limpar os pratos e salvar o seu local de férias! Melhor encontrar um pouco de sabão para limpar essa bagunça. Um monte de sabão...",
"questAtom1CollectSoapBars": "Barras de Sabão",
"questAtom1Drop": "O monstro de Lanchinhoness (Pergaminho)",
"questAtom2Text": "Ataque do Mundano, Parte 2: O Monstro de Lanchinhoness",
"questAtom2Notes": "Ufa, este lugar está ficando muito mais agradável com todos estes pratos limpos. Talvez você finalmente possa ter algum divertimento agora. Oh - parece haver uma caixa de pizza flutuando no lago. Bem, qual o problema de limpar mais uma coisa, não é verdade? Mas, infelizmente, não é uma mera caixa de pizza! Subitamente a caixa levanta da água para revelar-se como a cabeça de um monstro. Não pode ser! O Lendário Monstro de Lanchinhoness?! Diz-se que existe escondido no lago desde os tempos pré-históricos: a criatura criada a partir dos restos de comida e lixo dos antigos Habiticanos. Eca!",
"questAtom2Boss": "O Monstro de Lanchinhoness",
"questAtom2Drop": "O lavadeiromante (Pergaminho)",
"questAtom3Text": "Ataque do Mundano, Parte 3: O Lavadeiromante",
"questAtom3Notes": "Com um grito ensurdecedor, e cinco tipos de queijos deliciosos saindo de sua boca, o Monstro de Lanchinhoness cai aos pedaços. \"COMO VOCÊ SE ATRAVE!\" ecoa uma voz debaixo da superfície da água. Uma figura com uma túnica azul emerge da água, empunhando uma escova de vaso sanitário mágica. A roupa suja começa a borbulhar da superfície do lago. \"Eu sou o Lavadeiromante!\" ele com raiva anuncia. \"Você tem muita ousadia - lavando meus pratos deliciosamente sujos, destruindo meu animal de estimação, e entrando no meu domínio com essas roupas limpas. Prepare-se para sentir a ira encharcada de minha magia anti-limpeza!\"",
"questAtom3Completion": "O louco Lavadeiromante foi derrotado! Roupas limpas caem em pilhas ao seu redor. As coisas estão ficando muito melhor por aqui. Quando você começa a avançar pela armadura recém-passada, um brilho de metal chama sua atenção, e seu olhar recai sobre um elmo reluzente. O proprietário original deste brilhante item pode ser desconhecido, mas quando você o coloca, sente a calorosa presença de um espírito generoso. Pena que eles não colocaram uma etiqueta com nome.",
"questAtom3Boss": "O Lavadeiromante",
"questAtom3DropPotion": "Poção de Choca Básica",
"questOwlText": "A Coruja Noturna",
"questOwlNotes": "A luz da Taverna é acesa até o amanhecer.<br>Até que em véspera o brilho vai embora !<br>Como podemos ver durante nossas madrugadas?<br>@Twitching grita, \"Eu preciso de alguns lutadores!<br>Vê aquela Coruja-Noturna, inimiga estrelada?<br>Lute rápido e não devagar!<br>Vamos tirar essa sombra da nossa porta,<br>E fazer com que a noite brilhe mais uma vez!\"",
"questOwlCompletion": "A Coruja-Noturna some antes do raiar,<br>Mas mesmo assim você sente vontade de bocejar.<br>Talvez seja hora de descansar?<br>Então com sua cama você começa a sonhar!<br>A Coruja-Noturna sabe que pode ser uma bolada<br>Concluir trabalhos e ficar acordado até de madrugada,<br>Mas seus novos mascotes vão sutilmente ganir<br>Para lhe avisar quando é hora de dormir.",
"questOwlBoss": "A Coruja-Noturna",
"questOwlDropOwlEgg": "Coruja (Ovo)",
"questOwlUnlockText": "Desbloqueia ovos de Coruja para compra no Mercado",
"questPenguinText": "A Abominável Ave das Neves",
"questPenguinNotes": "Apesar de ser um dia quente de verão no extremo sul de Habitica, um frio estranho baixou sobre o Lago Vivaz. Fortes, gélidos ventos sopram enquanto as margens começam a congelar. Lanças de gelo começam a brotar do chão, afastando terra e grama pelo caminho. @Melynnrose e @Breadstrings correm até você.<br><br> \"Socorro!\" diz @Melynnrose. \"Nós trouxemos um pinguim gigante para congelar o lago para que pudêssemos patinar no gelo, mas acabamos ficando sem peixes para alimenta-lo!\"\"<br><br>\"Ele ficou bravo e agora está usando o seu sopro congelante em tudo que vê pela frente!\" diz @Breadstrings. \"Por favor, você tem que impedi-lo antes que todos fiquemos cobertos de gelo!\" Parece que está na hora desse pinguim... <em>ficar frio.</em>",
"questPenguinCompletion": "Com a derrota do pinguim, o gelo começa a derreter. O gigantesco pinguim se acomoda à luz do sol, deliciando-se com o balde extra de peixes que você arranjou. Ele desliza pelo lago, soprando gentilmente pelo caminho para criar uma bela pista de gelo, brilhante e lisa. Que pássaro bizarro! \"Parece que ele deixou alguns ovos para trás,\" diz @Painter de Cluster. <br><br>@Rattify rí. \"Talvez esses pinguins sejam mais... cabeça fria?\"",
"questPenguinBoss": "Pinguim Gelado",
"questPenguinDropPenguinEgg": "Pinguim (Ovo)",
"questPenguinUnlockText": "Desbloqueia ovos de Pinguim para compra no Mercado",
"questStressbeastText": "A Abominável Besta do Estresse dos estepes de Stoïkalm",
"questStressbeastNotes": "Complete Diárias e afazeres para causar dano no Chefe Global! Diárias incompletas enchem a barra de golpe de tensão. Quando a barra de golpe de tensão estiver cheia, o Chefe Global atacará um NPC. Um Chefe Global nunca causará dano a um jogador individual ou contas de qualquer forma. Somente contas ativas que não estão descansando na taverna terão suas tarefas incompletas computadas. <br><br>~*~<br><br> A primeira coisa que ouvimos são os passos, lentos e mais barulhentos que uma manada. Um por um, Habiticans olham para fora de suas portas, e faltam palavras. <br><br> Nós todos já vimos Bestas de Estresse antes, claro - pequenas criaturas perversas que atacam durante tempos difíceis. Mas isso? Maior que construções, com garras que podem esmagar um dragão com facilidade. Gelo balança de sua pelagem fedorenta, e a medida que ruge, uma explosão gélida destrói telhados de nossas casas. Um monstro dessa magnitude nunca foi mencionado fora de lendas distantes. <br><br>\"Cuidado, Habiticans!\" SabreCat grita. \"Se protejam dentro de suas casas - Essa é a própria Abominável Besta do Estresse!\" <br><br>\"Essa coisa deve ser feita de séculos de estresse!\" diz Kiwibot, trancando a porta da taverna firmemente e fechando as janelas. <br><br>\"Os estepes de Stoïkalm\" diz Lemoness, com pesar em sua face. \"Todo esse tempo, nós pensávamos que eles eram calmos e imperturbados, mas devem ter escondido seu estresse secretamente em algum lugar. Por gerações, transformou-se nisso, e agora está livre e os atacou - e a nós também! <br><br> Só há uma maneira de afastar uma Besta de Estresse, Abominavel ou não, e é atacá-la com Diárias e afazeres completos! Vamos todos nos unir e lutar contra esse temível inimigo - mas tenha certeza de não ser preguiçoso em suas tarefas, ou nossas Diárias incompleta podem enfurecê-lo tanto que irá atacar...",
"questStressbeastBoss": "A Abominável Besta do Estresse",
"questStressbeastBossRageTitle": "Ataque de estresse",
"questStressbeastBossRageDescription": "Quando essa barra encher, a Abominável Besta do Estresse vai lançar seu Ataque de Estresse sobre Habitica!",
"questStressbeastDropMammothPet": "Mamute (Mascote)",
"questStressbeastDropMammothMount": "Mamute (Montaria)",
"questStressbeastBossRageStables": "`Abominável Besta do Estresse usa ATAQUE DE ESTRESSE!`\n\nA onda de estresse cura a Abominável Besta do Estresse!\n\nOh não! Apesar dos nossos melhores esforços, nós deixamos algumas Diárias escaparem, e sua cor vermelho-escuro enfureceu a Abominável Besta do Estresse, fazendo com que ela recuperasse parte de sua vida! A horrível criatura investe contra os Estábulos, mas Matt, o Mestre das Bestas, heroicamente se lança em combate para proteger os mascotes e as montarias. A Besta do Estresse prendeu Matt em seu aperto perverso; mas, ao menos por enquanto, ela está distraída. Rápido! Vamos manter as Diárias sob controle e derrotar esse monstro antes que ele ataque novamente!",
"questStressbeastBossRageBailey": "`Abominável Besta do Estresse usa ATAQUE DE ESTRESSE!`\n\nA onda de estresse cura a Abominável Besta do Estresse!\n\nAhh!!! Nossas Diárias incompletas fizeram com que a Abominável Besta do Estresse ficasse mais furiosa do que nunca e recuperasse parte de sua vida! Bailey, a Arauto, gritava aos cidadãos para que se abrigassem, e agora a Besta a prendeu em sua outra mão! Olhe para ela, valentemente relatando as notícias enquanto a Besta do Estresse a chacoalha perversamente... Vamos honrar sua bravura sendo o mais produtivo que pudermos para salvar nossos NPCs!",
"questStressbeastBossRageGuide": "`Abominável Besta do Estresse usa ATAQUE DE ESTRESSE!`\n\nA onda de estresse cura a Abominável Besta do Estresse!\n\nCuidado! Justin, o Guia, está tentando distrair a Besta do Estresse, correndo em torno dos seus calcanhares, gritando dicas de produtividade! A Abominável Besta do Estresse está pisoteando furiosamente, mas parece que nós realmente estamos cansando esta besta. Eu duvido que ela tenha energia para outro ataque. Não desista... nós estamos muito perto de acabar com ela!",
"questStressbeastDesperation": "`A Abominável Besta do Estresse atinge 500K de vida! A Abominável Besta do Estresse usa Defesa Desesperada!\n\nNós estamos quase lá, Habiticanos! Com persistência e Diárias, nós diminuímos a vida da Besta do Estresse para apenas 500 mil! A criatura ruge e agita os braços em desespero, e sua ira aumenta como nunca. Bailey e Matt berram aterrorizados quando a Besta começa a chacoalhá-los em um ritmo aterrador e cria uma cegante tempestade de neve, que a torna mais difícil de ser acertada.\n\nNós teremos que redobrar nossos esforços, mas tenha fé - isso é um sinal de que a Besta do Estresse sabe que está a ponto de ser derrotada. Não desista agora!",
"questStressbeastCompletion": "<strong>A Abominável Besta do Estresse foi DERROTADA!</strong><br><br> Conseguimos! Com um golpe final, a Abominável Besta do Estresse se dissipa em uma nuvem de neve. Os flocos de neve brilham no ar enquanto alegres Habiticanos abraçam seus animais de estimação e montarias. Nossos animais e nossos NPCs estão seguros novamente!<br><br><strong> Stoïkalm está salva! </strong><br><br>SabreCat fala, suavemente, com seu tigre dentes de sabre. \"Por favor, encontre os cidadãos das Estepes de Stoïkalm e traga-os até nós,\" ele diz. Várias horas depois, o tigre dentes de sabre retorna, e cavaleiros montados em uma manada de mamutes o seguem. Você reconhece a amazona da fileira frontal como sendo Lady Glaciate, a líder de Stoïkalm. <br><br> \"Grandes Habiticanos\", ela diz, \"Meus cidadãos e eu devemos, a vocês, a nossa mais profunda gratidão e sinceras desculpas. Em uma tentativa de proteger nossas Estepes de problemas, nós começamos, secretamente, a banir todo o nosso stress para as montanhas geladas. Nós não fazíamos idéia de que ele iria acumular-se ao longo das gerações e formar a Besta do Estresse que vocês viram! Quando ela libertou-se, prendeu a todos nós na montanha, em seu lugar, e começou um ataque contra nossos amados animais.\" Seu olhar triste se volta para a neve caindo. \"Colocamos todos em risco por causa de nossa tolice. Estejam certos de que no futuro, iremos até vocês com nossos problemas, antes que nossos problemas venham até vocês.\" <br><br> Ela se volta para onde @Baconsaur está abraçando alguns filhotes de mamute. \"Nós trouxemos comida aos seus animais, como uma oferenda e como um pedido de perdão por tê-los assustado, e como símbolo de confiança, nós deixaremos alguns de nossos mascotes e montarias com vocês. Nós sabemos que todos vocês irão cuidar bem deles.\"",
"questStressbeastCompletionChat": "`A Abominável Besta do Estresse foi DERROTADA!`\n\nConseguimos! Com um golpe final, a Abominável Besta do Estresse se dissipa em uma nuvem de neve. Os flocos de neve brilham no ar enquanto alegres Habiticanos abraçam seus animais de estimação e montarias. Nossos animais e nossos NPCs estão seguros novamente!\n\nStoïkalm está salva! \n\nSabreCat fala, suavemente, com seu tigre dentes de sabre. \"Por favor, encontre os cidadãos das Estepes de Stoïkalm e traga-os até nós,\" ele diz. Várias horas depois, o tigre dentes de sabre retorna, e cavaleiros montados em uma manada de mamutes o seguem. Você reconhece a amazona da fileira frontal como sendo Lady Glaciate, a líder de Stoïkalm. \n\n\"Grandes Habiticanos\", ela diz, \"Meus cidadãos e eu devemos, a vocês, a nossa mais profunda gratidão e sinceras desculpas. Em uma tentativa de proteger nossas Estepes de problemas, nós começamos, secretamente, a banir todo o nosso stress para as montanhas geladas. Nós não fazíamos idéia de que ele iria acumular-se ao longo das gerações e formar a Besta do Estresse que vocês viram! Quando ela libertou-se, prendeu a todos nós na montanha, em seu lugar, e começou um ataque contra nossos amados animais.\" Seu olhar triste se volta para a neve caindo. \"Colocamos todos em risco por causa de nossa tolice. Estejam certos de que no futuro, iremos até vocês com nossos problemas, antes que nossos problemas venham até vocês.\"\n\nEla se volta para onde @Baconsaur está abraçando alguns filhotes de mamute. \"Nós trouxemos comida aos seus animais, como uma oferenda e como um pedido de perdão por tê-los assustado, e como símbolo de confiança, nós deixaremos alguns de nossos mascotes e montarias com vocês. Nós sabemos que todos vocês irão cuidar bem deles.\"",
"questTRexText": "O Rei dos Dinossauros",
"questTRexNotes": "Agora que antigas criaturas das Estepes de Stoïkalm estão vagando por toda Habitica, @Urse decidiu adotar um Tiranossauro adulto. O que poderia dar errado?<br><br> Tudo.",
"questTRexCompletion": "O dinossauro selvagem finalmente cessa sua ira e decide criar amizade com os galos gigantes. @Urse o observa atentamente. \"Eles não são mascotes tão terríveis, afinal! Só precisam de um pouco de disciplina. Aqui, pegue alguns dos ovos de Tiranossauro para você.",
"questTRexBoss": "Tiranossauro de Carniça",
"questTRexUndeadText": "O Dinossauro Volta à Vida",
"questTRexUndeadNotes": "Enquanto os antigos dinossauros vindos das Estepes Stoïkalm vagam através da Cidade dos Hábitos, um grito de terror emana do Grande Museu. @Bancosaur berra, \"O esqueleto de Tiranossauro dentro do museu está se mexendo! Ele deve ter sentido a presença de parentes dele!\" A besta esquelética mostra seus dentes e caminha ruidosamente em sua direção. Como você pode derrotar uma criatura que já está morta? Você terá que atacá-la rápido, antes que ela se cure!",
"questTRexUndeadCompletion": "Os olhos brilhantes do Tiranossauro se escurecem, e ele se fixa em seu pedestal costumeiro. Todos suspiram de alívio. \"Olhem!\" @Baconsaur diz. \"Alguns dos ovos fossilizados estão novos e brilhantes! Talvez eles se choquem para você.\"",
"questTRexUndeadBoss": "Tiranossauro Esquelético",
"questTRexUndeadRageTitle": "Cura Esquelética",
"questTRexUndeadRageDescription": "Esta barra se enche quando você não completa suas Diárias. Quando está cheia, o Tiranossauro Esquelético vai recuperar 30% de sua vida restante!",
"questTRexUndeadRageEffect": "`Tiranossauro Esquelético usa CURA ESQUELÉTICA!`\n\nO monstro solta um estrondoso rugido, e alguns de seus ossos quebrados se remendam!",
"questTRexDropTRexEgg": "Tiranossauro (Ovo)",
"questTRexUnlockText": "Desbloqueia ovos de Tiranossauro para compra no Mercado",
"questRockText": "Fuja da Criatura da Caverna",
"questRockNotes": "Atravessando as Montanhas Sinuosas de Habitica com alguns amigos, você monta acampamento, em uma noite, em uma bela caverna incrustada com minerais brilhantes. Mas, quando você acorda, na manhã seguinte, vê que a entrada desapareceu, e o chão da caverna está movendo-se embaixo de você. <br><br>\"A montanha está viva!\", grita o seu companheiro @pfeffernusse. \"Isto não são cristais - isto são dentes!\"<br><br>@Painter de Cluster agarra sua mão. \"Nós teremos de achar outra saída - fique ao meu lado e não se distraia, ou poderemos ficar presos aqui para sempre!\"",
"questRockBoss": "Colosso de Cristal",
"questRockCompletion": "Sua diligência permitiu que você encontrasse um caminho seguro através da montanha viva. De pé, e sob o brilho do sol, seu amigo @intune percebe alguma coisa brilhando no chão, próxima à saída da caverna. Você inclina-se para pegá-la, e vê que é uma pequena pedra com uma veia de ouro transpassando-a. Ao lado dela, há mais algumas pedras com formas bastante peculiares. Elas quase se parecem com... ovos?",
"questRockDropRockEgg": "Pedra (Ovo)",
"questRockUnlockText": "Desbloqueia ovos de Pedra para compra no Mercado",
"questBunnyText": "A Coelhinha Assasina",
"questBunnyNotes": "Depois de muitos dias difíceis, você alcança o cume do Monte da Proscratinação e se mantém de pé em frente às portas imponentes do Forte da Negligência. Você lê a inscrição na pedra: \"Aqui dentro, reside a criatura que incorpora os seus maiores medos, a razão para a sua inatividade. Bata na porta e enfrente o seu demônio!\" Você treme, imaginando o horror que está do lado de dentro, e sente vontade de fugir, como já fez tantas outras vezes. @Draayder te segura. \"Mantenha-se firme, amigo! A hora finalmente chegou. Você precisa fazer isto!\"<br><br> Você bate, e as portas abrem-se para dentro. Em meio à escuridão, você ouve um rugido ensurdecedor, e saca a sua arma.",
"questBunnyBoss": "Coelhinha Assasina",
"questBunnyCompletion": "Com um golpe final, a coelha assassina vai ao chão. Uma névoa brilhante surge ao redor do seu corpo enquanto ela encolhe, até tornar-se uma pequena coelha... que não se parece em nada com a fera cruel que você enfrentou há um momento atrás. O nariz dela move-se de forma adorável; e, pulando, ela vai embora, deixando alguns ovos para trás. @Gully gargalha. \"O Monte da Procrastinação consegue fazer com que mesmo os menores desafios pareçam insuperáveis. Vamos coletar estes ovos e ir para casa.\"",
"questBunnyDropBunnyEgg": "Coelho (Ovo)",
"questBunnyUnlockText": "Desbloqueia ovos de Coelho para compra no Mercado",
"questSlimeText": "O Regente Geléia",
"questSlimeNotes": "Na medida em que você trabalha nas suas tarefas, você nota que está se movendo cada vez mais devagar. \"É como andar pelo melado\", resmunga @Leephon. \"Não, é como andar pela geléia!\" diz @starsystemic. \"Aquele viscoso Regente Geléia derramou suas coisas por toda Habitica. Isto está emperrando os trabalhos. Todo mundo está ficando lento! Você olha ao redor. As ruas estão, aos poucos, se enchendo com uma gosma límpida e colorida, e os Habiticanos estão se debatendo para fazer suas coisas. Enquanto alguns fogem da área, você pega o esfregão e se prepara para a batalha!",
"questSlimeBoss": "Regente Geléia",
"questSlimeCompletion": "Com um soco final, você tranca o Regente Geléia em uma rosquinha gigante, auxiliado por @Overomega, @LordDarkly e @Shaner, os espertos líderes do clube da confeitaria. Enquanto todos estão lhe parabenizando, você sente algo escorregar para dentro de seu bolso. É a recompensa por seu doce sucesso: três ovos de Gosma Marshmallow.",
"questSlimeDropSlimeEgg": "Gosma Marshmallow (Ovo)",
"questSlimeUnlockText": "Desbloqueia ovos de Gosma para compra no Mercado",
"questSheepText": "O Carneiro do Trovão",
"questSheepNotes": "Enquanto perambula pela zona rural Tarefana com seus amigos, dando uma \"pausa rápida\" em suas obrigações, você encontra uma loja aconchegante de linhas para costura. Você está tão absorvido em sua procrastinação que mal percebe as nuvens sinistras que se arrastam sobre o horizonte. \"Eu tenho um ma-a-a-al pressentimento sobre este tempo,\" murmura @Misceo, e você olha para cima. As nuvens tempestuosas se unem e giram em um turbilhão, e elas se parecem muito com um... \"Nós não temos tempo para contemplar nuvens!\" @starsystemic grita. \"Está atacando!\" O Carneiro do Trovão se move, correndo rapidamente e violentamente, lançando raios bem na sua direção!",
"questSheepBoss": "Carneiro do Trovão",
"questSheepCompletion": "Impressionado pela sua diligência, o Carneiro do Trovão deixa a raiva ir embora. Ele atira três enormes pedras de granizo na sua direção; e então, lentamente, desaparece, emitindo um estrondo grave. Ao olhar mais atentamente, você descobre que as pedras de granizo eram, na verdade, três ovos macios e peludos. Você os recolhe, e depois caminha calmamente de volta para casa sob um céu azul.",
"questSheepDropSheepEgg": "Ovelha (Ovo)",
"questSheepUnlockText": "Desbloqueia ovos de Ovelha para compra no Mercado",
"questKrakenText": "O Kraken do Inkompleto",
"questKrakenNotes": "Está um dia quente e ensolarado enquanto vocês navegam sobre a Baia Inkompleta, mas seus pensamentos estão turvos com preocupações sobre tudo que vocês precisam fazer. Parece que assim que você termina uma tarefa, outra surge e depois outra...<br><br>De repente, o barco dá um horrível solavanco e pegajosos tentáculos saltam da água por todos os lados! \"Estamos sendo atacados pelo Kraken do Inkompleto!\" Wolvenhalo grita.<br><br>\"Rápido!\" Lemoness lhes chama. \"Acertem o máximo de tentáculos e tarefas que vocês puderem, antes que outros possam surgir em seu lugar!\"",
"questKrakenBoss": "O Kraken do Inkompleto",
"questKrakenCompletion": "Enquanto o Kraken foge, diversos ovos boiam para a superfície da água. Lemoness os examina e suas suspeitas se tornam alegria. \"Ovos de Lula!\", diz ela. \"Aqui, peguem eles como uma recompensa por tudo que vocês realizaram.\"",
"questKrakenDropCuttlefishEgg": "Lula (Ovo)",
"questKrakenUnlockText": "Desbloqueia ovos de Lula para compra no Mercado",
"questWhaleText": "Lamento da Baleia",
"questWhaleNotes": "Você chega na Doca dos Diligentes, na esperança de arranjar um submarino para ver a Corrida de Cavalos Marinhos de Dilatória. De repente, um berro ensurdecedor faz você parar e cobrir seus ouvidos. \"E ela sopra!\" o Capitão @krazjega Grita, apontando para uma enorme e barulhenta baleia. \"Não é seguro enviar os submarinos enquanto ela está se debatendo!\"<br><br>\"Rápido,\" diz ao @UncommonCriminal. \"Me ajude a acalmar a pobre criatura para podermos entender porque ela está fazendo todo este barulho!\"",
"questWhaleBoss": "Baleia Chorona",
"questWhaleCompletion": "Depois de muito trabalho duro, finalmente a baleia cessa seu choro violento. \"Parece que ela estava se afogando em ondas de hábitos negativos,\" @zoebeagle explica. \"Graças ao seu esforço consistente, nós fomos capazes de virar a maré!\" Assim que você entra no submarino, vários ovos de baleia pulam em sua direção, e você os acolhe.",
"questWhaleDropWhaleEgg": "Baleia (Ovo)",
"questWhaleUnlockText": "Desbloqueia ovos de Baleia para compra no Mercado",
"questDilatoryDistress1Text": "Angustia da Dilatória, Parte 1: Mensagem na Garrafa",
"questDilatoryDistress1Notes": "Uma mensagem em uma garrafa chegou da recente reconstruída cidade de Dilatória! Lê-se: \"Queridos Habiticanos, precisamos da sua ajuda mais uma vez. Nossa princesa desapareceu e a cidade está sob o cerco de alguns estranhos demônios d'água! Os camarões mantis estão segurando os atacantes na baía. Por favor, ajudar-nos!\" Para fazer a longa viagem até a cidade submersa, é preciso ser capaz de respirar água. Felizmente, os alquimistas @Benga e @hazel podem tornar isso possível! Vocês só tem que encontrar os ingredientes necessários.",
"questDilatoryDistress1Completion": "Você veste a armadura com barbatanas e nada para Dilatória o mais rápido possível. O tritões e seus aliados camarões mantis conseguiram manter os monstros fora da cidade por enquanto, porém eles estão perdendo. Tão logo que você adentra as muralhas do castelo, o horrível cerco ataca subitamente!",
"questDilatoryDistress1CollectFireCoral": "Coral de Fogo",
"questDilatoryDistress1CollectBlueFins": "Barbatanas Azuis",
"questDilatoryDistress1DropArmor": "Armadura Oceânica com Barbatanas (Armadura)",
"questDilatoryDistress2Text": "Angustia da Dilatória, Parte 2: Criaturas da Fenda",
"questDilatoryDistress2Notes": "O cerco pode ser visto de muito longe: milhares de crânios sem corpo que correm através de um portal nas fendas das paredes em direção à Dilatória.<br><br>Quando você encontra o Rei Manta em sua sala de guerra, seus olhos parecem profundos e seu rosto preocupado. \"Minha filha Adva desapareceu na Fenda Escura pouco antes deste cerco começar. Por favor, encontre-a e traga-a de volta para casa em segurança! Eu vou lhe emprestar a minha Tiara do Coral de Fogo para ajudá-lo. Se você tiver sucesso, ela é sua.\"",
"questDilatoryDistress2Completion": "Você acaba com a horda assustadora de crânios, mas você não tem a menor ideia de como encontrar Adva. Você fala para @Kiwibot, a rastreadora real, para ver se ela tem alguma ideia. \"Os camarões mantis que defendem a cidade devem ter visto Adva fugir,\" diz @Kiwibot. \"Tente seguir-los pela Fenda Escura.\"",
"questDilatoryDistress2Boss": "Enxame da Caveiras D'água",
"questDilatoryDistress2RageTitle": "Retorno do Enxame",
"questDilatoryDistress2RageDescription": "Retorno do Enxame: Esta barra enche quando você não completa suas Diárias. Quando fica cheia, o Enxame de Caveiras D'água irá curar 30% da sua vida!",
"questDilatoryDistress2RageEffect": "`Enxame de Caveiras D'água usa RETORNO DO ENXAME!`\n\nEncorajado pelas suas vitórias, mais crânios jorram da fenda, reforçando o enxame!",
"questDilatoryDistress2DropSkeletonPotion": "Poção de Choca Esqueleto",
"questDilatoryDistress2DropCottonCandyBluePotion": "Poção de Choca Algodão-Doce Azul",
"questDilatoryDistress2DropHeadgear": "Tiara do Coral flamejante (Equipamento de cabeça)",
"questDilatoryDistress3Text": "Angustia da Dilatória, Parte 3: Não uma Sereia qualquer",
"questDilatoryDistress3Notes": "Você segue os camarões mantis Fenda a dentro, e descobre uma fortaleza subaquática. Princesa Adva, escoltada por crânios d'água, espera por você dentro do salão principal. \"O meu pai que enviou você, não foi? Diga à ele que eu me recuso a voltar. Eu estou contente em ficar aqui e praticar minha feitiçaria. Saia agora, ou você irá sentir a ira da nova rainha do oceano!\" Adva parece muito inflexível, mas enquanto ela fala você nota um estranho pingente de rubi em seu pescoço, brilhando de forma ameaçadora... Talvez seus delírios acabariam se você quebrá-lo?",
"questDilatoryDistress3Completion": "Finalmente, você consegue puxar o pingente enfeitiçado do pescoço de Adva e jogá-lo fora. Adva agarra a cabeça. \"Onde estou? O que aconteceu aqui?\" Depois de ouvir sua história, ela franze a testa. \"Este colar foi-me dado por uma estranha embaixadora - uma senhora chamada 'Tzina'. Eu não me lembro de nada depois disso!\"<br><br>De volta à Dilatória, Manta está muito feliz por seu sucesso. \"Permita-me recompensá-lo com este tridente e este escudo! Eu os encomendei do @aiseant e do @starsystemic como um presente para Adva, mas... eu prefiro não dar armas para ela tão cedo.\"",
"questDilatoryDistress3Boss": "Adva, a Sereia Usurpadora",
"questDilatoryDistress3DropFish": "Peixe (Comida).",
"questDilatoryDistress3DropWeapon": "Tridente da Maré Absoluta (Arma)",
"questDilatoryDistress3DropShield": "Escudo de Pérola Lunar (Item para mão do escudo)",
"questCheetahText": "Tão Guepardo",
"questCheetahNotes": "Enquanto você caminha pela Savana Sloensteadi com seus amigos @PainterProphet, @tivaquinn, @Unruly Hyena, e @Crawford, você fica assustado ao ver um Guepardo correndo com um novo Habiticano na boca. Embaixo das patas ferozes do Guepardo, tarefas somem mesmo sem serem completadas -- antes de alguém sequer ter a chance de finalizá-las. O Habiticano vê você e grita \"Por favor, me ajude! Este Guepardo está me fazendo subir de nível muito rápido, mas não estou terminando tarefa nenhuma. Quero ir mais devagar e aproveitar o jogo. Faça ele parar!\" Você lembra com carinho dos seus dias de iniciante e sabe que precisa ajudar o novato parando o Guepardo!",
"questCheetahCompletion": "O novo Habiticano está ofegante depois do ocorrido com o Guepardo, mas agradece a você e aos seus amigos pela ajuda. \"Estou feliz que o Guepardo não poderá mais abocanhar ninguém. Ele até deixou alguns ovos de Guepardo para a gente, então talvez possamos criá-los como mascotes mais confiáveis!\"",
"questCheetahBoss": "Guepardo",
"questCheetahDropCheetahEgg": "Guepardo (Ovo)",
"questCheetahUnlockText": "Desbloqueia ovos de guepardo para comprar no Mercado",
"questHorseText": "Cavalgue o Pesadelo",
"questHorseNotes": "Enquanto relaxa na Taverna com @beffymaroo e @JessicaChase, a conversa acaba virando sobre as grandes conquistas que você teve em suas aventuras. Orgulhoso dos seus feitos, e talvez um pouco empolgado demais, você se vangloria dizendo que pode dominar qualquer tarefa. Um estranho que passava por perto vira pra você e sorri. Apenas um olho pisca e ele lhe desafia a andar no seu cavalo para provar o que você disse.\nEnquanto vocês todos vão para o estábulo, o @UncommonCriminal sussura: \"Talvez você tenha botado no prato mais do que pode comer. Esse não é um cavalo - é um Pesa-Delo!\". Olhando para as pegadas dele, você começa a se arrepender de ter dito aquilo...",
"questHorseCompletion": "Foi necessaria toda sua habilidade, mas finalmente o cavalo bate com o casco no chão e se apoia no seu ombro antes de te deixar monta-lo. Você cavalga breve porém orgulhosamente ao redor da Taverna enquanto seus amigos vibram. O estranho sorri de ponta a ponta.\n\"Então não foi conversa fiada! Sua determinação é realmente impressionante. Pegue estes ovos para criar seus próprios cavalos, e talvez nos encontraremos novamente algum dia.\" Você pega os ovos, o estranho ajeita seu chapéu.... e desaparece.",
"questHorseBoss": "Pesadelo",
"questHorseDropHorseEgg": "Cavalo (Ovo)",
"questHorseUnlockText": "Desbloqueie ovos de Cavalo no Mercado",
"questBurnoutText": "Desgaste e os Espíritos Exaustos",
"questBurnoutNotes": "Passou da meia-noite, mas o calor ainda queima quando Redphoenix e a capitã dos escoteiros, Kiwibot, entram abruptamente pelos portões da cidade. \"Precisamos evacuar todas as construções de madeira\", grita Redphoenix. \"Rápido!\"<br><br>Kiwibot se segura na parede enquanto recupera o fôlego. \"Ele está sugando pessoas e transformando-as em Espíritos Exaustos! É por isso que tudo estava atrasado. É isso que aconteceu com as pessoas desaparecidas. Ele está roubando a energia delas!\"<br><br>\"Ele?\", pergunta Lemoness.<br><br>E aí o calor toma forma.<br><br>Surge da terra em uma forma que cresce em espiral, enquanto o ar sucumbe ao cheiro da fumaça e do enxofre. Chamas avançam pelo chão derretido e transformam-se em patas, alcançando um tamanho assustador. Olhos ardentes se abrem e a criatura solta um alto estalo.<br><br> Kiwibot então sussurra uma única palavra.<br><br><em>\"Desgaste.\"</em>",
"questBurnoutCompletion": "<strong>Desgaste foi DERROTADO!</strong><br><br>Com um grande e suave suspiro, Desgaste libera, devagar, sua energia ardente que estava alimentando seu fogo. Enquanto o monstro desaparece calmamente em cinzas, as energias que ele roubou brilham no ar, rejuvenescendo os Espíritos Exaustos e os devolvendo à suas verdadeiras formas. <br><br>Ian, Daniel e a Feiticeira Sazonal animam-se enquanto os Habiticanos correm para saudá-los e todos os cidadãos desaparecidos dos Campos Florescentes abraçam suas famílias e amigos. O último Espírito Exausto se transforma na Ceifadora Alegre! <br><br>\"Olhem!\" sussurra @Baconsaur, enquanto as cinzas começam a brilhar. Devagar, elas se transformam em centenas de fênix reluzentes!<br><br>Um dos brilhantes pássaros pousa no braço esqueleto da Ceifadora Alegre e sorri para ela. \"Já faz bastante tempo que eu tive o raro privilégio de testemunhar uma fênix nos Campos Florescentes,\" ela disse. \"Apesar das ocorrências recentes, eu preciso dizer que isto é, realmente, tematicamente apropriado!\"<br><br>Seu tom de voz fica sereno, apesar de (naturalmente) seu sorriso permanecer. \"Nós somos conhecidos por nosso trabalho duro aqui, mas também somos conhecidos por nossos banquetes e festivais. Bem irônico, eu suponho, enquanto nos esforçamos para planejar uma festa espetacular, nós nos recusamos a nos permitir qualquer tempo para diversão. Nós certamente não vamos cometer o mesmo erro outra vez!\"<br><br>Ela aplaude. \"Agora - vamos celebrar!\"",
"questBurnoutCompletionChat": "Desgaste foi DERROTADO!<br><br>Com um grande e suave suspiro, Desgaste libera, devagar, sua energia ardente que estava alimentando seu fogo. Enquanto o monstro desaparece calmamente em cinzas, as energias que ele roubou brilham no ar, rejuvenescendo os Espíritos Exaustos e os devolvendo à suas verdadeiras formas. <br><br>Ian, Daniel e a Feiticeira Sazonal animam-se enquanto os Habiticanos correm para saudá-los e todos os cidadãos desaparecidos dos Campos Florescentes abraçam suas famílias e amigos. O último Espírito Exausto se transforma na Ceifadora Alegre! <br><br>\"Olhem!\" sussurra @Baconsaur, enquanto as cinzas começam a brilhar. Devagar, elas se transformam em centenas de fênix reluzentes!<br><br>Um dos brilhantes pássaros pousa no braço esqueleto da Ceifadora Alegre e sorri para ela. \"Já faz bastante tempo que eu tive o raro privilégio de testemunhar uma fênix nos Campos Florescentes,\" ela disse. \"Apesar das ocorrências recentes, eu preciso dizer que isto é, realmente, tematicamente apropriado!\"<br><br>Seu tom de voz fica sereno, apesar de (naturalmente) seu sorriso permanecer. \"Nós somos conhecidos por nosso trabalho duro aqui, mas também somos conhecidos por nossos banquetes e festivais. Bem irônico, eu suponho, enquanto nos esforçamos para planejar uma festa espetacular, nós nos recusamos a nos permitir qualquer tempo para diversão. Nós certamente não vamos cometer o mesmo erro outra vez!\"<br><br>Ela aplaude. \"Agora - vamos celebrar!\"<br><br>Todos os Habiticanos recebem:<br><br>Mascote Fênix<br>Montaria Fênix<br>Conquista: Salvador dos Campos Florescentes<br>Doce Básico<br>Doce de Baunilha<br>Doce de Areia<br>Doce de Canela<br>Doce de Chocolate<br>Doce Podre<br>Doce Rosa Azedo<br>Doce Azul Azedo<br>Doce de Mel",
"questBurnoutBoss": "Desgaste",
"questBurnoutBossRageTitle": "Golpe de Exaustão",
"questBurnoutBossRageDescription": "Quando este medidor estiver cheio, o Desgaste aplicará seu Golpe por Exaustão em todo Habitica.",
"questBurnoutDropPhoenixPet": "Fênix (Mascote)",
"questBurnoutDropPhoenixMount": "Fênix (Montaria)",
"questBurnoutBossRageQuests": "`Desgaste usou o GOLPE POR EXAUSTÃO!`\n\nAh não! Mesmo com nosso esforço, deixamos algumas Diárias escapar e agora o Desgaste se inflamou com energia! Com um amedrontador grunhido, ele engole Ian, o Mestre das Missões, num espectro de fogo. Enquanto pergaminhos de missões caem queimadas, a fumaça espairece e você percebe que o Ian teve sua energia arrancada e se transformou num flutuante Espírito Exausto!\n\nApenas a derrota do Desgaste pode quebrar o feitiço e trazer de volta nosso querido Mestre das Missões. Vamos continuar fazendo nossas Diárias e derrotar esse monstro antes que ele ataque novamente!",
"questBurnoutBossRageSeasonalShop": "`Desgaste usa ATAQUE DE EXAUSTÃO!`\n\nAhh !!! Nossas Diárias incompletas têm alimentado as chamas do Desgaste, e agora ele tem energia suficiente para atacar novamente! Ele solta um jorro de chamas espectrais que cauteriza a Loja Sazonal. Você se horroriza ao ver que a animada Feiticeira Sazonal foi transformada em um abatido Espírito Exausto.\n\nTemos que resgatar nossos NPCs! Se apressem, Habiticanos, concluam suas tarefas e derrotem o Desgaste antes que ele ataque pela terceira vez!",
"questBurnoutBossRageTavern": "`Desgaste usa ATAQUE DE EXAUSTÃO!`\n\nMuitos Habiticanos tem se escondido do Desgaste na Taverna, mas não mais! Com um uivo estridente, Desgaste arranha a Taverna com as suas mãos ardentes. À medida que os clientes da Taverna fogem, Daniel é pego nas garras de Queimadura, e se transforma em um Espírito Exausto na sua frente! \n\nEste horror cabeça quente já dura tempo demais. Não desista... estamos tão perto de vencer o Desgaste de uma vez por todas!",
"questFrogText": "Pântano do Sapo Bagunceiro",
"questFrogNotes": "Enquanto você e seus amigos caminham com dificuldade pelo Pântano da Estagnação, @starsystemic aponta para uma placa \"Fique no caminho -- se puder.\" <br><br>\"Com certeza isso não é difícil!\" @RosemonkeyCT diz. \"É amplo e claro.\"<br><br>Mas conforme você avança, nota que o caminho gradualmente vai sendo tomado pela sujeira do pântano, ladeado por estranhos detritos azuis, até que é impossível prosseguir.<br><br>Conforme você olha em volta, se perguntando como ficou tão bagunçado, @Jon Arjinborn grita \"Cuidado!\" Um sapo irritado pula do lodo, vestindo roupas sujas e iluminado por um fogo azul. Você terá que superar esse venenoso Sapo Bagunceiro para avançar!",
"questFrogCompletion": "O sapo se acovarda na lama, derrotado. Conforme ele sai, o lodo azul esvanece, deixando o caminho à frente livre.<br><br>Parados no meio do caminho estão três ovos perfeitos. \"Você consegue até ver os pequenos girinos pela casca transparente!\" @Breadstrings diz, \"Aqui, você pode ficar com eles.\"",
"questFrogBoss": "Sapo Bagunceiro",
"questFrogDropFrogEgg": "Sapo (Ovo)",
"questFrogUnlockText": "Desbloqueia ovos de Sapo para compra no Mercado",
"questSnakeText": "A Serpente da Distração",
"questSnakeNotes": "É preciso um espírito durão para viver nas Duas da Distração. O deserto árido não é um lugar muito produtivo, e as dunas brilhantes têm levado muitos viajantes a se perderem. No entanto, alguma coisa tem assustado até mesmo os locais. As areias foram mudando e engolfando aldeias inteiras. Moradores alegam que um monstro com um enorme corpo de serpente está à espreita sob as areias, e todos eles oferecem juntos uma recompensa para aquele que irá ajudá-los a encontrá-lo e pará-lo. Os mais elogiados encantadores de serpentes @EmeraldOx e @PainterProphet concordaram em ajudá-lo a convocar a besta. Poderá você impedir a Serpente da Distração?",
"questSnakeCompletion": "Com a ajuda dos encantadores, você baniu a Serpente da Distração. Ainda que você tenha ficado feliz com a ajuda dos habitantes das Dunas, você não conseguiu não se sentir triste pelos companheiros derrotados. Enquanto você admira o horizonte, o @LordDarkly se aproxima. \"Obrigado! Não é muito, mas espero que isso possa expressar nossa gratidão.\" Ele oferece um pouco de Ouro e.... alguns ovos de Cobra! Você verá esse animal maravilhoso no final das contas.",
"questSnakeBoss": "Serpente da Distração",
"questSnakeDropSnakeEgg": "Cobra (Ovo)",
"questSnakeUnlockText": "Desbloqueie ovos de Cobra para compra no Mercado",
"questUnicornText": "Convencendo a Rainha Unicórnio",
"questUnicornNotes": "A Enseada da Conquista tornou-se turva, destruindo suprimento de água fresca da Cidade dos Hábitos! Felizmente, @Lukreja conhece uma antiga lenda que afirma que um chifre de unicórnio pode purificar a mais imunda das águas. Juntamente com o seu guia intrépido @UncommonCriminal, você caminha através dos picos congelados das Montanhas Serpenteantes. Finalmente, na cúpula de gelo do próprio Monte Habitica, você encontra a Rainha Unicórnio no meio das neves brilhantes. \"Seus fundamentos são convincentes\", ela lhe diz. \"Mas primeiro você deve provar que você é digno de minha ajuda!\"",
"questUnicornCompletion": "Impressionado com sua diligência e força, a Rainha Unicórnio finalmente concorda que sua causa é digna. Ela permite que você montar em suas costas enquanto ela sobe para a fonte da Enseada da Conquista. Quando ela abaixa seu chifre de ouro para as águas sujas, uma luz azul brilhante sai da superfície da água. É tão cegante que você é forçado a fechar os olhos. Quando você os abre um momento depois, o unicórnio desapareceu. No entanto, @rosiesully solta um grito de alegria: agora a água está clara, e três ovos brilhantes descansam à beira da enseada.",
"questUnicornBoss": "A Rainha Unicórnio",
"questUnicornDropUnicornEgg": "Unicórnio (Ovo)",
"questUnicornUnlockText": "Desbloqueia ovos de Unicórnio para compra no Mercado",
"questSabretoothText": "O Gato Dente de Sabre",
"questSabretoothNotes": "Um monstro rugidor está aterrorizando Habitica! A criatura espreita nas matas e florestas, então ataca rapidamente antes de desaparecer novamente. Ele está caçando pandas inocentes e assustando porcos voadores em fugirem de seus currais para pousarem nas arvores. @Inventrix e @icefelis explicam que o Gato Dente de Sabres Zumbi foi libertado enquanto eles escavavam nos antigos e intocados campos de gelo das Estepes de Stoikalm. \"Ele era perfeitamente dócil no começo não entendo o que houve. Por favor, você tem que nos ajudar a recaptura-lo! Apenas um campeão de Habitica pode subjugar essa besta pré-histórica!\"",
"questSabretoothCompletion": "Depois de uma longa e desgastante batalha, você golpeia o Gato Dentes de Sabre Zumbi para o chão. Como você finalmente pode se aproximar, nota uma cavidade em um dos dentes de sabre. Percebendo o verdadeiro motivo da fúria do gato, você pede para @Fandekasp preencher a cavidade, e aconselha todos a evitarem alimentar seu amigo com doces no futuro. O Gato Dentes de Sabre melhora e em agradecimento, seus domadores te enviam uma recompensa generosa uma ninhada de ovos de dente de sabre!",
"questSabretoothBoss": "Gato Dente de Sabre Zumbi",
"questSabretoothDropSabretoothEgg": "Dente de Sabre (Ovo)",
"questSabretoothUnlockText": "Desbloqueia ovos compráveis de Dente de Sabre no Mercado",
"questMonkeyText": "Mandril Monstruoso e os Macacos Travessos",
"questMonkeyNotes": "A Savana Sloensteadi está sendo devastada pelo Mandril Monstruoso e seus Macacos Travessos! Eles gritam alto o suficiente para abafar os sons dos prazos que se aproximam, encorajando todos a evitar suas obrigações e continuar a procrastinar. Infelizmente, muitas pessoas imitam esse comportamento ruim. Se ninguém parar esses primatas, logo as tarefas de todos estarão tão vermelhas quanto a cara do Monstruoso Mandril!!<br><br>\"Precisaremos de um aventureiro dedicado para opor-se a eles,\" diz @yamato.<br><br>\"Rápido, vamos tirar esse macaco das costas de todo o mundo!\" @Oneironaut grita, e você corre para o combate.",
"questMonkeyCompletion": "Você conseguil! Hoje esses demônios vão ficar sem bananas. Oprimidos por sua força, os macacos fogem em pânico. \"Olha\", diz @Misceo. \"Eles deixaram alguns ovos para trás.\"<br><br>@Leephon Sorri. \"Talvez um macaco de estimação bem treinado pode ajudá-lo tanto quanto os selvagens atrapalharam!\"",
"questMonkeyBoss": "Mandril Monstruoso",
"questMonkeyDropMonkeyEgg": "Macaco (Ovo)",
"questMonkeyUnlockText": "Desbloqueia ovos de Macaco para compra no Mercado",
"questSnailText": "O trabalho fastidioso do caracol Sludge",
"questSnailNotes": "Você está excitado para começar a sua aventura nos Calabouços abandonados do Tédio, mas logo que você entra, você sente o chão embaixo dos seus pés começarem a sugar suas botas. Você olha para o caminho a frente e vê Habiticanos afundados na gosma. @Overomega grita, \"Eles tem muitos deveres e Diárias pouco relevantes, e estão se prendendo nas coisas que não importam! Puxe-os fora!\" <br><br>\"Você precisa encontrar a origem da gosma,\" @Pfeffernusse concorda, \"ou as tarefas que eles não conseguirem cumprir vão puxa-los para baixo para sempre!\"<br><br>Puxando fora a sua arma, você cruza a lama pegajosa... e encontra o temível Caracol do Lodo Tedioso.",
"questSnailCompletion": "Você desce sua arma na grande concha do Caracol, quebrando ela em dois, liberando uma inundação de água. A gosma é lavada, e os Habiticanos a sua volta comemoram. \"Olhe!\" fala @Misceo. \"Tem um pequeno grupo de ovos de caracol nos restos do muco.\"",
"questSnailBoss": "trabalho fastidioso do caracol Sludge",
"questSnailDropSnailEgg": "Caracol (Ovo)",
"questSnailUnlockText": "Desbloqueia ovos de Caracol para compra no Mercado",
"questBewilderText": "O Be-Wilder",
"questBewilderNotes": "A festa começa como qualquer outra.<br><br>Os aperitivos estão excelentes, a música está a animar o ambiente e até os elefantes dançarinos já são parte da rotina. Os Habiticanos riem e conversam entre os centros de mesa florais abastados, contentes por se distrairem das suas tarefas mais fastidiosas e o Palhaço de Abril rodopia entre eles, ansiosamente executando truques e fazendo piadas.<br><br> Assim que a torre-relógio de Mistyflying bate à meia-noite, o Palhaço de Abril salta para o palco e começa um discurso.<br><br> \"Amigos! Inimigos! Conheçidos 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 ilusões confusas normalmente duram somente um dia. No entanto, é o meu prazer anunciar que descobri uma forma de nos garantir diversão sem fim sem o peso intrometido das nossas responsabilidades. Ilustres Habiticanos, conheçam o meu novo amigo mágico...O Be-Wilder!\"<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 à volta do Palhaço de Abril, formando penas e um pescoço alongado. A multidão fica sem palavras enquanto um pássaro monstruoso se materializa à sua frente, soltando um riso estridente.<br><br>\"Ah! Faz épocas desde que um Habiticano foi tolo o suficiente para me invocar! Que maravilhosa esta sensação de ter uma forma tangível finalmente.\"<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 flores brilhantes começam a secar e a flutuar ao vento.<br><br>\"Meus caros amigos, porquê este pânico?\", grita o Be-Wilder, batendo as suas asas. \"Não é necessário trabalhar 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. \"Mas isto é uma piada?\" pergunta 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 vos distraia dos vossos objectivos! Mantenham o foco nas Tarefas que precisam de completar para salvar Mistiflying -- e esperemos, vocês.",
"questBewilderCompletion": "<strong>O Be-Wilder foi DERROTADO!</strong><br><br>Conseguimos! O Be-Wilder deixa sair um grito final enquanto se torce todo no ar, largando penas como se fosse uma chuva. Gradualmente, transforma-se numa nuvem de névoa. Com o Sol começando a furar o nevoeiro, este dissipa-se revelando as silhuetas de Bailey, Matt, Alex... e o Palhaço de Abril.<br><br><strong>Mistiflying está salva!</strong><br><br>O Palhaço de Abril tem um ar envergonhado. \"Ah, hmmm,\" diz ele. \"Talvez me tenha...entusiasmado um pouco.\"<br><br>A multidão murmura. Flores ensopadas enchem os passeios. Algures, um telhado cai, fazendo soar o som de água a salpicar.<br><br>\"Pois...\" diz o Palhaço de Abril, \"Bom. O que quero dizer é que quero pedir desculpa\". Ele solta um suspiro. \"Bom, parece que tudo não pode ser tudo diversão e jogos. Não magoa focar-nos de vez em quando. Acho que vou começar a preparar a partida 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 Palhaço de Abril. \"Nada a temer! Vou deixar a Cidade dos Hábitos toda arrumada em pouco tempo. Felizmente ninguém é melhor que eu a manusear duas esfregonas ao mesmo tempo.\"<br><br>Encorajada, 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 Be-Wilder se evaporou, as abelhas mágicas de Mistiflying voltaram ao trabalho e em pouco tempo as flores estão de novo a despontar e a cidade flutua de novo.<br><br>Enquanto os Habiticanos dão festas às abelhas mágicas, os olhos do Palhaço de Abril iluminam-se. \"Oho! Tive um pensamento! Porque não mantemos algumas destas abelhas como Bichos de Estimação ou Montadas? É uma prenda que representa perfeitamente o balanço entre trabalho árduo e recompensas, isto se for para ser simbólico e aborrecido convosco.\" Ele pisca o olho. \"Além disso, não têm ferrões! Honra de Palhaço.\"",
"questBewilderCompletionChat": "`O Be-Wilder foi DERROTADO!`\n\nConseguimos! O Be-Wilder deixa sair um grito final enquanto se torce todo no ar, largando penas como se fosse uma chuva. Gradualmente, transforma-se numa nuvem de névoa. Com o Sol começando a furar o nevoeiro, este dissipa-se revelando as silhuetas de Bailey, Matt, Alex... e o Palhaço de Abril.\n\n`Mistiflying está salva!`\n\nO Palhaço de Abril tem um ar envergonhado. \"Ah, hmmm,\" diz ele. \"Talvez me tenha...entusiasmado um pouco.\"\n\nA multidão murmura. Flores ensopadas enchem os passeios. Algures, um telhado cai, fazendo soar o som de água a salpicar.\n\n\"Pois...\" diz o Palhaço de Abril, \"Bom. O que quero dizer é que quero pedir desculpa\". Ele solta um suspiro. \"Bom, parece que tudo não pode ser tudo diversão e jogos. Não magoa focar-nos de vez em quando. Acho que vou começar a preparar a partida 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 Palhaço de Abril. \"Nada a temer! Vou deixar a Cidade dos Hábitos toda arrumada em pouco tempo. Felizmente ninguém é melhor que eu a manusear duas esfregonas ao mesmo tempo.\"\n\nEncorajada, 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 Be-Wilder se evaporou, as abelhas mágicas de Mistiflying voltaram ao trabalho e em pouco tempo as flores estão de novo a despontar e a cidade flutua de novo.\n\nEnquanto os Habiticanos dão festas às abelhas mágicas, os olhos do Palhaço de Abril iluminam-se. \"Oho! Tive um pensamento! Porque não mantemos algumas destas abelhas como Bichos de Estimação ou Montadas? É uma prenda que representa perfeitamente o balanço entre trabalho árduo e recompensas, isto se for para ser simbólico e aborrecido convosco.\" Ele pisca o olho. \"Além disso, não têm ferrões! Honra de Palhaço.\"",
"questBewilderBossRageTitle": "Ataque de Decepção",
"questBewilderBossRageDescription": "Quando esta barra enche, o Be-Wilder libertará o seu Ataque de Decepção sobre Habitica!",
"questBewilderDropBumblebeePet": "Abelha Mágica (Mascote)",
"questBewilderDropBumblebeeMount": "Abelha Mágica (Montaria)",
"questBewilderBossRageMarket": "`O Be-Wilder usa o ATAQUE DE DECEPÇÃO!`\n\nOh não! Apesar do nosso melhor esforço, fomos distraídos pelas ilusões do Be-Wilder e esquecemo-nos de completar algumas das nossas Diárias! Com um riso cacarejante, a besta brilhante bate as suas asas, levantando uma névoa à volta de Alex, o comerciante. Quando se dissipa, ele está possuido! \"Tomem algumas amostras grátis!\" grita com prazer, lançando ovos explosivos e poções aos Habiticanos em fuga. Não são os saldos mais favoráveis, sem dúvida.\n\nDepressa! Vamos manter-nos focados nas nossas Diárias para derrotar este monstro antes que possua mais alguém.",
"questBewilderBossRageStables": "`O Be-Wilder usa o ATAQUE DE DECEPÇÃO!`\n\nAhhh!!! Uma vez mais, o Be-WIlder distraiu-nos o suficiente para negligenciarmos as nossas Diárias, e agora atacou Matt, o Mestre das Bestas! Com um remoinho de névoa, Matt transforma-se numa criatura alada terrível e todos os animais e montadas uivam de tristeza nos seus estábulos. Depressa, mantenham-se focados nas vossas Tarefas para derrotar esta distração terrível!",
"questBewilderBossRageBailey": "`O Be-Wilder usa o ATAQUE DE DECEPÇÃO!`\n\nCuidado! Enquanto reporta as notícias, Bailey, a Arauto, é possuída pelo Be-Wilder! Ela solta um guincho maléfico e sem significado enquanto começa a flutuar no ar. Como é que vamos saber agora o que se está a passar?\n\nNão desistam...estamos tão perto de derrotar este pássaro incómodo de uma vez para todas!",
"questFalconText": "As Aves de Rapinrolação",
"questFalconNotes": "Montanha Habitica está sendo ofuscada por uma crescente montanha de Afazeres. Ela costumava ser um lugar ter piqueniques e aproveitar a sensação de dever cumprido, até que as tarefas negligenciadas cresceram fora de controle. Agora é a casa das temidas Aves de Rapinrolação, criaturas abomináveis que impedem os Habiticanos de completarem suas tarefas!<br><br>\"Está muito quente!\" elas grasnam para @JonArinbjorn e @Onheiron. \"Demorará muito para fazer agora. Não fará diferença alguma se você quiser esperar até amanhã! Por que você não faz algo divertido no lugar?\"<br><br>Basta, você jura. Você escalará sua montanha pessoal de Afazeres e derrotará as Aves de Rapinrolação!",
"questFalconCompletion": "Tendo finalmente triunfado sobre as Aves de Rapinrolação, você se acalma para aproveitar a vista e seu bem-merecido descanso.<br><br>\"Uau!\" diz @Trogdorina. \"Você venceu!\"<br><br>@Squish acrescenta, \"Aqui, pegue estes ovos que achei como recompensa.\"",
"questFalconBoss": "Aves de Rapinrolação",
"questFalconDropFalconEgg": "Falcão (Ovo)",
"questFalconUnlockText": "Desbloqueia ovos de Falcão para compra no Mercado",
"questTreelingText": "A Árvore Emaranhada",
"questTreelingNotes": "É a Competição de Jardinagem anual e todos estão falando sobre o projeto misterioso que @aurakami prometeu revelar. Você se junta à multidão naquele dia do grande anúncio e se admira com a entrada de uma árvore que se mexe. @fuzzytrees explica que a árvore ajudará com a manutenção do jardim, mostrando como ela pode cortar a grama, aparar os arbustos e podar as roseiras tudo ao mesmo tempo - até que de repente a árvore fica louca, virando suas tesouras de poda contra o seu criador! A multidão entra em pânico e todo mundo tenta fugir, mas você não tem medo - você se inclina para a frente, pronto para batalhar.",
"questTreelingCompletion": "Você tira seu pó quando as últimas folhas caem no chão. Em vez de triste, a Competição de Jardinagem agora está segura - apesar de que a árvore que você reduziu a uma pilha de lascas de madeira não ganhará nenhum prêmio! \"Ainda alguns nós para serem trabalhados aqui\", diz @PainterProphet. \"Talvez alguém mais faça um bom trabalho treinando os brotos. Você arrisca uma tentativa?\"",
"questTreelingBoss": "Árvore Emaranhada",
"questTreelingDropTreelingEgg": "Arvorezinha (Ovo)",
"questTreelingUnlockText": "Desbloqueia ovos de Arvorezinhas compráveis no Mercado",
"questAxolotlText": "O Axolote Mágico",
"questAxolotlNotes": "Das profundezas do Lago Lavado você vê subirem bolhas e... fogo? Um pequeno axolote sobe das águas escuras vomitando faixas de cores. De repente, ele começa a abrir sua boca e @streak grita, \"Cuidado!\" quando o Axolote Mágico começa a engolir sua força de vontade!<br><br> O Axolote Mágico cresce com feitiço e zomba de você. \"Já ouviu falar dos meus poderes de regeneração? Você vai cansar antes que eu canse!\"<br><br>\"Nós conseguimos te derrotar com os bons hábitos que desenvolvemos!\" @PainterProphet grita desafiadoramente. Você toma forças para ficar produtivo para derrotar o Axolote Mágico e conseguir de volta sua força de vontade roubada!",
"questAxolotlCompletion": "Após derrotar o Axolote Mágico, você percebe que ganhou de volta sua força de vontade por si mesmo.<br><br>\"A força de vontade? A regeneração? Tudo foi só uma ilusão?\" pergunta @Kiwibot.<br><br>\"A maioria da mágica é\", replica o Axolote Mágico. \"Me desculpe por enganar vocês. Por favor, recebam esses ovos como um pedido de desculpas. Eu confio que vocês os criarão para usar sua magia para bons hábitos e não para o mau!\"<br><br>Você e @hazel40 pegam seus ovos novos em uma mão e acenam adeus com a outra enquanto o Axolote Mágico volta para o lago.",
"questAxolotlBoss": "Axolote Mágico",
"questAxolotlDropAxolotlEgg": "Axolote (Ovo)",
"questAxolotlUnlockText": "Desbloqueia ovos de Axolote para compra no Mercado",
"questAxolotlRageTitle": "Regeneração do Axolote",
"questAxolotlRageDescription": "Essa barra enche quando você não completa suas Diárias. Quando estiver cheia, o Axolote Mágico curará 30% de sua vida remanescente!",
"questAxolotlRageEffect": "'O Axolote Mágico usa REGENERAÇÃO AXOLOTE!'\n\nUma cortina de bolhas coloridas escurece o monstro por um instante, e quando clareia, algumas de suas feridas desaparecem!",
"questTurtleText": "Guie a Tartaruga",
"questTurtleNotes": "Socorro! Essa tartaruga marinha gigante não consegue encontrar o caminho para a praia com o ninho dela. Ela volta lá todo ano para deixar seus ovos, mas este ano a Baía Inkompleta está cheia de Restos de Tarefas tóxicos feitos de Diárias vermelhas e afazeres não marcados. \"Ela está se debatendo em pânico!\", diz @JessicaChase.<br>\n<br>@UncommonCriminal concorda com a cabeça. \"É porque o senso de direção dela está ofuscado e confuso.\"<br>\n<br>@Scarabsi segura o seu braço. \"Você pode ajudar a limpar essa Baía Inkompleta que está bloqueando o caminho dela? Pode ser perigoso, mas precisamos ajudá-la!\"",
"questTurtleCompletion": "Seu trabalho valente limpou as águas para a nossa tartaruga marinha encontrar a praia dela. Você, @Bambin, e @JaizakAripaik assistem enquanto ela enterra seus ovos profundamente na areia, para que possam crescer e eclodir em centenas de pequenas tartarugas marinhas. Como sempre uma dama, ela dá a vocês três ovos para cada, pedindo que vocês os alimentem e cuidem deles para que um dia se tornem grandes tartarugas marinhas.",
"questTurtleBoss": "Restos de Tarefas",
"questTurtleDropTurtleEgg": "Tartaruga (Ovo)",
"questTurtleUnlockText": "Desbloqueia ovos de Tartaruga para compra no Mercado",
"questArmadilloText": "A Tatu Preguiçosa",
"questArmadilloNotes": "É hora de ir lá fora e começar seu dia. Você abre a porta até ela bater em algo que parece ser apenas uma pedra. \"Eu só estou tirando um dia de folga!\" fala uma baixa voz através da porta bloqueada. \"Não precisa de exageros, só relaxe hoje!\"<br><br>De repente, @Beffymaroo e @PainterPhophet batem na janela. \"Parece que que a Tatu Preguiçosa gostou de você! Vamos lá, vamos te ajudar a se livrar dela!\"",
"questArmadilloCompletion": "Finalmente, após uma longa manhã tentando convencer a Tatu Preguiçosa que você quer, de fato, trabalhar, ela desiste. \"Me perdoe!\" Ela se desculpa. \"Eu só queria ajudar. Eu achei que tomo mundo gostasse de dias de preguiça!\"<br><br>Você sorri e explica pra ela que da próxima vez que você merecer um dia de folga, ela será convidada. @Tipsy e @krajzega te parabenizam pelo bom trabalho enquanto ela rola e vai embora, deixando alguns ovos como pedido de desculpas.",
"questArmadilloBoss": "Tatu Preguiçosa",
"questArmadilloDropArmadilloEgg": "Tatu (Ovo)",
"questArmadilloUnlockText": "Desbloqueia Ovos de Tatu para compra no Mercado."
}
-5
View File
@@ -1,5 +0,0 @@
Do not edit any files in this directory!
For more information read:
https://github.com/HabitRPG/habitrpg/blob/develop/common/locales/README.md
-5
View File
@@ -1,5 +0,0 @@
Do not edit any files in this directory!
For more information read:
https://github.com/HabitRPG/habitrpg/blob/develop/common/locales/README.md
-35
View File
@@ -1,35 +0,0 @@
{
"tipTitle": "Tip #<%= tipNumber %>",
"tip1": "Проверьте задачи на ходу с помощью мобильных приложений Habitica.",
"tip2": "Достигните 100 уровня, чтобы бесплатно получить Шар Возрождения и начать новое приключение!",
"tip3": "Используйте emoji, чтобы быстро различать свои задачи.",
"tip4": "Используйте символ # перед названием задания, чтобы сделать его очень большим!",
"tip5": "Баффы, наложенные утром, продержатся дольше.",
"tip6": "Иногда переоценивайте свои задачи, чтобы удостовериться в их своевременности",
"tip7": "Некоторые фоны идеально соединяются друг с другом, если члены команды используют одно и то же изображение. Например, Горное Озеро, Пагода или Круглые Холмы.",
"tip8": "Send a PM to someone by clicking the envelope near their name in chat!",
"tip9": "Visit the Guild Leaders & Challenge Creators Guild for advice on starting a Guild.",
"tip10": "You can win gems by competing in Challenges. New ones are added every day!",
"tip11": "If you enjoy dressing up your avatar, check out the Costume Carnival Guild.",
"tip12": "Join the “Challenge... Accepted” Guild for regularly scheduled random challenges.",
"tip13": "Having more than four Party members increases accountability!",
"tip14": "You can add headers or inspirational quotes to your list as Habits with no (+/-).",
"tip15": "Add checklists to your To-Dos to increase your rewards!",
"tip16": "Check out the Data tab for valuable insights on your progress.",
"tip17": "Using Tags can make an unwieldy task list very manageable!",
"tip18": "Habits that are just positive or just negative gradually “fade” and return to yellow.",
"tip19": "Boost your Intelligence Stat to gain more XP when you complete a task.",
"tip20": "Boost your Perception Stat to get more drops and gold.",
"tip21": "Boost your Strength Stat to do more boss damage or get critical hits.",
"tip22": "Boost your Constitution Stat to lessen the damage from incomplete Dailies.",
"tip23": "Click the bar graph icon on your tasks to see a graph showing your progress.",
"tip24": "Habitica is Open Source! Ask in the Aspiring Legends Guild if you want to contribute.",
"tip25": "The four seasonal Grand Galas start near the solstices and equinoxes.",
"tip26": "An arrow to the left of someones level number means theyre currently buffed.",
"tip27": "Make late-night Dailies refer to the night before (such as “flossed last night”) so you can check them off in the morning.",
"tip28": "Set a Custom Day Start under Settings > Site to control when your day restarts.",
"tip29": "Complete all your Dailies to get a Perfect Day Buff that increases your stats!",
"tip30": "You can invite people to Guilds, not just Parties.",
"tip31": "Check out the pre-made lists in the Library of Shared Lists Guild for example tasks.",
"tip32": "Lots of Habiticas code, art, and writing is made by volunteer contributors! Anyone can help."
}
-5
View File
@@ -1,5 +0,0 @@
Do not edit any files in this directory!
For more information read:
https://github.com/HabitRPG/habitrpg/blob/develop/common/locales/README.md
-5
View File
@@ -1,5 +0,0 @@
Do not edit any files in this directory!
For more information read:
https://github.com/HabitRPG/habitrpg/blob/develop/common/locales/README.md
-5
View File
@@ -1,5 +0,0 @@
Do not edit any files in this directory!
For more information read:
https://github.com/HabitRPG/habitrpg/blob/develop/common/locales/README.md
-5
View File
@@ -1,5 +0,0 @@
Do not edit any files in this directory!
For more information read:
https://github.com/HabitRPG/habitrpg/blob/develop/common/locales/README.md
-17
View File
@@ -1,17 +0,0 @@
{
"lostAllHealth": "У вас закінчилося здоров'я!",
"dontDespair": "Не занепадайте духом!",
"deathPenaltyDetails": "Ви втратили рівень, ваше золото, і одне обмундирування, але ви можете їх відпрацювати! Ви прекрасно справитеся, щасти!",
"refillHealthTryAgain": "Вилікуватися і спробувати знову",
"dyingOftenTips": "Часто вмираєте? <a href='http://habitica.wikia.com/wiki/Death_Mechanics#Strategies_for_Staying_Alive' target='_blank'>Ось кілька порад!</a>\n",
"losingHealthWarning": "Обережно - Ви втрачаєте здоров'я!",
"losingHealthWarning2": "Не дайте скінчитися здоров'ю! Втратите рівень, ваше золото, і одну річ з інвентаря.",
"toRegainHealth": "Щоб знову отримати Здоров'я:",
"lowHealthTips1": "Підвищіть рівень щоб повністю оздоровитися!",
"lowHealthTips2": "Купіть лікувальне зілля з колонки нагород щоб відновити 15 очків здоров'я.",
"losingHealthQuickly": "Швидко втрачаєте здоров'я?",
"lowHealthTips3": "Невиконані щоденні задачі приносять вам шкоду уночі, тож не додавайте забагато спочатку!",
"lowHealthTips4": "Ви можете вимкнути щоденне завдання, якщо воно не має терміну придатності.",
"goodLuck": "Удачі!",
"cannotRevive": "Не можливо оживити живого."
}
-35
View File
@@ -1,35 +0,0 @@
{
"tipTitle": "Порада #<%= tipNumber %>",
"tip1": "Відмічайте завдання на ходу за допомогою мобільних додатків Habitica.",
"tip2": "Досягніть ріня 100, щоб безплатно розблокувати Сферу Переродження та почати пригоди заново!",
"tip3": "Використовуйте смайлики, щоб швидко розрізняти свої завдання.",
"tip4": "Використайте знак # перед назвою завдання, щоб зробити текст справді великим!",
"tip5": "Краще використовувати підсилюючі чари вранці, щоб вони тривали довше.",
"tip6": "Час від часу переоцінюйте свої завдання, щоб переконатися в їх актуальності!",
"tip7": "Some backgrounds connect perfectly if party members use the same background. Ex: Mountain Lake, Pagodas, and Rolling Hills.",
"tip8": "Надішліть комусь приватне повідомлення, натиснувши на конверт біля його імені в чаті!",
"tip9": "Visit the Guild Leaders & Challenge Creators Guild for advice on starting a Guild.",
"tip10": "Ви можете виграти самоцвіти, проходячи випробування. Вони з'являються кожен день!",
"tip11": "If you enjoy dressing up your avatar, check out the Costume Carnival Guild.",
"tip12": "Join the “Challenge... Accepted” Guild for regularly scheduled random challenges.",
"tip13": "Having more than four Party members increases accountability!",
"tip14": "Ви можете додати заголовки або надихаючі вас цитати в ваш список як звички без (+/-)",
"tip15": "Add checklists to your To-Dos to increase your rewards!",
"tip16": "Глянувши на вкладку з даними, ви отримаєте корисну інформацію щодо вашого прогресу.",
"tip17": "Громіздкий список щоденних справ можна значно спростити, розбивши його тегами.",
"tip18": "Звички, які є лише хорошими або лише поганими, з часом жовтіють самі.",
"tip19": "Підвищіть ваш інтелект щоб отримувати більше досвіду від завдань.",
"tip20": "Підвищіть вашу спостережливість щоб отримувати більше випадкових призів та золота.",
"tip21": "Підвищіть вашу силу щоб наносити більше ушкоджень босам та критичних ударів.",
"tip22": "Boost your Constitution Stat to lessen the damage from incomplete Dailies.",
"tip23": "Натисніть іконку \"графік\" на задачі щоб поглянути на графік, ілюструючий ваш прогрес.",
"tip24": "Habitica is Open Source! Ask in the Aspiring Legends Guild if you want to contribute.",
"tip25": "The four seasonal Grand Galas start near the solstices and equinoxes.",
"tip26": "Стрілка зліва від рівня персонажа означає, що він посилений.",
"tip27": "Make late-night Dailies refer to the night before (such as “flossed last night”) so you can check them off in the morning.",
"tip28": "В налаштуваннях можна змінити час початку доби.",
"tip29": "За завершення всіх щоденних завдань дається \"підсилення ідеального дня\", яке збільшує характеристики.",
"tip30": "Крім груп, людей можна запрошувати в гільдії.",
"tip31": "Check out the pre-made lists in the Library of Shared Lists Guild for example tasks.",
"tip32": "Багато коду, графіки і текстів сайту Habitica зроблено добровольцями. Кожен може допомогти."
}
-5
View File
@@ -1,5 +0,0 @@
Do not edit any files in this directory!
For more information read:
https://github.com/HabitRPG/habitrpg/blob/develop/common/locales/README.md
-5
View File
@@ -1,5 +0,0 @@
Do not edit any files in this directory!
For more information read:
https://github.com/HabitRPG/habitrpg/blob/develop/common/locales/README.md
-7
View File
@@ -1,7 +0,0 @@
import _ from 'lodash';
// TODO remove completely, use _.get, only used in client
module.exports = function dotGet (user, path) {
return _.get(user, path);
};
-14
View File
@@ -1,14 +0,0 @@
import _ from 'lodash';
/*
This allows you to set object properties by dot-path. Eg, you can run pathSet('stats.hp',50,user) which is the same as
user.stats.hp = 50. This is useful because in our habitrpg-shared functions we're returning changesets as {path:value},
so that different consumers can implement setters their own way. Derby needs model.set(path, value) for example, where
Angular sets object properties directly - in which case, this function will be used.
*/
// TODO use directly _.set and remove this fn, only used in client
module.exports = function dotSet (user, path, val) {
return _.set(user, path, val);
};
-7
View File
@@ -1,7 +0,0 @@
// TODO remove once v2 is retired
module.exports = function nullify (user) {
user.ops = null;
user.fns = null;
user = null;
};
-12
View File
@@ -1,12 +0,0 @@
import _ from 'lodash';
import predictableRandom from './predictableRandom';
// Get a random property from an object
// returns random property (the value)
module.exports = function randomVal (user, obj, options = {}) {
let array = options.key ? _.keys(obj) : _.values(obj);
let rand = predictableRandom(user, options.seed);
array.sort();
return array[Math.floor(rand * array.length)];
};
-27
View File
@@ -1,27 +0,0 @@
import refPush from '../libs/refPush';
import validator from 'validator';
import i18n from '../i18n';
import {
BadRequest,
} from '../libs/errors';
import _ from 'lodash';
module.exports = function addWebhook (user, req = {}) {
let wh = user.preferences.webhooks;
if (!validator.isURL(_.get(req, 'body.url'))) throw new BadRequest(i18n.t('invalidUrl', req.language));
if (!validator.isBoolean(_.get(req, 'body.enabled'))) throw new BadRequest(i18n.t('invalidEnabled', req.language));
user.markModified('preferences.webhooks');
if (req.v2 === true) {
return user.preferences.webhooks;
} else {
return [
refPush(wh, {
url: req.body.url,
enabled: req.body.enabled,
}),
];
}
};
-15
View File
@@ -1,15 +0,0 @@
import _ from 'lodash';
import autoAllocate from '../fns/autoAllocate';
module.exports = function allocateNow (user, req = {}) {
_.times(user.stats.points, () => autoAllocate(user));
user.stats.points = 0;
if (req.v2 === true) {
return _.pick(user, 'stats');
} else {
return [
user.stats,
];
}
};
-10
View File
@@ -1,10 +0,0 @@
import _ from 'lodash';
module.exports = function deleteWebhook (user, req) {
delete user.preferences.webhooks[_.get(req, 'params.id')];
user.markModified('preferences.webhooks');
return [
user.preferences.webhooks,
];
};
-102
View File
@@ -1,102 +0,0 @@
import content from '../content/index';
import i18n from '../i18n';
import _ from 'lodash';
import {
BadRequest,
NotAuthorized,
NotFound,
} from '../libs/errors';
function evolve (user, pet, petDisplayName, req) {
user.items.pets[pet] = -1;
user.items.mounts[pet] = true;
if (pet === user.items.currentPet) {
user.items.currentPet = '';
}
return i18n.t('messageEvolve', {
egg: petDisplayName,
}, req.language);
}
module.exports = function feed (user, req = {}) {
let pet = _.get(req, 'params.pet');
let foodK = _.get(req, 'params.food');
if (!pet || !foodK) throw new BadRequest(i18n.t('missingPetFoodFeed', req.language));
if (pet.indexOf('-') === -1) {
throw new BadRequest(i18n.t('invalidPetName', req.language));
}
let food = content.food[foodK];
if (!food) {
throw new NotFound(i18n.t('messageFoodNotFound', req.language));
}
let userPets = user.items.pets;
if (!userPets[pet]) {
throw new NotFound(i18n.t('messagePetNotFound', req.language));
}
let [egg, potion] = pet.split('-');
let potionText = content.hatchingPotions[potion] ? content.hatchingPotions[potion].text(req.language) : potion;
let eggText = content.eggs[egg] ? content.eggs[egg].text(req.language) : egg;
let petDisplayName = i18n.t('petName', {
potion: potionText,
egg: eggText,
}, req.language);
if (!user.items.food[food.key]) {
throw new NotFound(i18n.t('messageFoodNotFound', req.language));
}
if (content.specialPets[pet]) {
throw new NotAuthorized(i18n.t('messageCannotFeedPet', req.language));
}
if (user.items.mounts[pet]) {
throw new NotAuthorized(i18n.t('messageAlreadyMount', req.language));
}
let message;
if (food.key === 'Saddle') {
message = evolve(user, pet, petDisplayName, req);
} else {
if (food.target === potion || content.hatchingPotions[potion].premium) {
userPets[pet] += 5;
message = i18n.t('messageLikesFood', {
egg: petDisplayName,
foodText: food.text(req.language),
}, req.language);
} else {
userPets[pet] += 2;
message = i18n.t('messageDontEnjoyFood', {
egg: petDisplayName,
foodText: food.text(req.language),
}, req.language);
}
if (userPets[pet] >= 50 && !user.items.mounts[pet]) {
message = evolve(user, pet, petDisplayName, req);
}
}
user.items.food[food.key]--;
if (req.v2 === true) {
return {
value: userPets[pet],
};
} else {
return [
userPets[pet],
message,
];
}
};
-18
View File
@@ -1,18 +0,0 @@
import _ from 'lodash';
import i18n from '../i18n';
import { NotFound } from '../libs/errors';
// TODO used only in client, move there?
module.exports = function getTag (user, req = {}) {
let tid = _.get(req, 'params.id');
let index = _.findIndex(user.tags, {
id: tid,
});
if (index === -1) {
throw new NotFound(i18n.t('messageTagNotFound', req.language));
}
return user.tags[index];
};
-5
View File
@@ -1,5 +0,0 @@
// TODO used only in client, move there?
module.exports = function getTags (user) {
return user.tags;
};
-14
View File
@@ -1,14 +0,0 @@
import i18n from '../i18n';
module.exports = function markPmsRead (user, req = {}) {
user.inbox.newMessages = 0;
if (req.v2 === true) {
return user;
} else {
return [
user.inbox.newMessages,
i18n.t('pmsMarkedRead'),
];
}
};
-9
View File
@@ -1,9 +0,0 @@
module.exports = function sleep (user, req = {}) {
user.preferences.sleep = !user.preferences.sleep;
if (req.v2 === true) {
return {};
} else {
return [user.preferences.sleep];
}
};
-11
View File
@@ -1,11 +0,0 @@
import _ from 'lodash';
// TODO used only in client, move there?
module.exports = function updateUser (user, req = {}) {
_.each(req.body, (val, key) => {
_.set(user, key, val);
});
return user;
};
-20
View File
@@ -1,20 +0,0 @@
import validator from 'validator';
import i18n from '../i18n';
import {
BadRequest,
} from '../libs/errors';
module.exports = function updateWebhook (user, req) {
if (!validator.isURL(req.body.url)) throw new BadRequest(i18n.t('invalidUrl', req.language));
if (!validator.isBoolean(req.body.enabled)) throw new BadRequest(i18n.t('invalidEnabled', req.language));
user.markModified('preferences.webhooks');
user.preferences.webhooks[req.params.id].url = req.body.url;
user.preferences.webhooks[req.params.id].enabled = req.body.enabled;
if (req.v2 === true) {
return user.preferences.webhooks;
} else {
return [user.preferences.webhooks[req.params.id]];
}
};
+2
View File
@@ -7,6 +7,8 @@
"FACEBOOK_ANALYTICS":"1234567890123456",
"FACEBOOK_KEY":"123456789012345",
"FACEBOOK_SECRET":"aaaabbbbccccddddeeeeffff00001111",
"GOOGLE_CLIENT_ID":"123456789012345",
"GOOGLE_CLIENT_SECRET":"aaaabbbbccccddddeeeeffff00001111",
"NODE_DB_URI":"mongodb://localhost/habitrpg",
"TEST_DB_URI":"mongodb://localhost/habitrpg_test",
"NODE_ENV":"development",
-19
View File
@@ -1,19 +0,0 @@
import { MongoClient as mongo } from 'mongodb';
import config from '../config';
module.exports.updateUser = (_id, path, value) => {
mongo.connect(config.NODE_DB_URI, (err, db) => {
if (err) throw err;
let collection = db.collection('users');
collection.updateOne(
{ _id },
{ $set: { [`${path}`]: value } },
(updateErr, result) => {
if (updateErr) throw updateErr;
console.log('done updating', _id);
db.close();
}
);
});
}
-24
View File
@@ -1,24 +0,0 @@
'use strict';
require('babel-register');
let _ = require('lodash');
let updateUser = require('./_helper').updateUser;
let userId = process.argv[2];
if (!userId) {
console.error('USAGE: node debug-scripts/grant-all-equipment.js <user_id>');
console.error('EFFECT: Adds all gear to specified user');
return;
}
let gearFlat = require('../common').content.gear.flat;
let userGear = {};
_.each(gearFlat, (piece, key) => {
userGear[key] = true;
});
updateUser(userId, 'items.gear.owned', userGear);
-28
View File
@@ -1,28 +0,0 @@
'use strict';
require('babel-register');
let _ = require('lodash');
let updateUser = require('./_helper').updateUser;
let userId = process.argv[2];
if (!userId) {
console.error('USAGE: node debug-scripts/grant-all-mounts.js <user_id>');
console.error('EFFECT: Adds all mounts to specified user');
return;
}
let dropMounts = require('../common').content.mounts;
let questMounts = require('../common').content.questMounts;
let specialMounts = require('../common').content.specialMounts;
let premiumMounts = require('../common').content.premiumPets; // premium mounts isn't exposed on the content object
let userMounts = {};
_.each([ dropMounts, questMounts, specialMounts, premiumMounts ], (set) => {
_.each(set, (pet, key) => {
userMounts[key] = true;
});
})
updateUser(userId, 'items.mounts', userMounts);
-28
View File
@@ -1,28 +0,0 @@
'use strict';
require('babel-register');
let _ = require('lodash');
let updateUser = require('./_helper').updateUser;
let userId = process.argv[2];
if (!userId) {
console.error('USAGE: node debug-scripts/grant-all-pets.js <user_id>');
console.error('EFFECT: Adds all pets to specified user');
return;
}
let dropPets = require('../common').content.pets;
let questPets = require('../common').content.questPets;
let specialPets = require('../common').content.specialPets;
let premiumPets = require('../common').content.premiumPets;
let userPets = {};
_.each([ dropPets, questPets, specialPets, premiumPets ], (set) => {
_.each(set, (pet, key) => {
userPets[key] = 95;
});
})
updateUser(userId, 'items.pets', userPets);
-1
View File
File diff suppressed because one or more lines are too long
+10
View File
@@ -0,0 +1,10 @@
{
"root": true,
"env": {
"node": true,
},
"extends": [
"habitrpg/server",
"habitrpg/babel"
],
}
+5 -1
View File
@@ -15,8 +15,12 @@ gulp.task('apidoc', ['apidoc:clean'], (done) => {
});
if (result === false) {
done(new Error('There was a problem generating apiDoc documentation.'))
done(new Error('There was a problem generating apiDoc documentation.'));
} else {
done();
}
});
gulp.task('apidoc:watch', ['apidoc'], () => {
return gulp.watch(APIDOC_SRC_PATH + '/**/*.js', ['apidoc']);
});
@@ -8,7 +8,7 @@ import babel from 'babelify';
gulp.task('browserify', function () {
let bundler = browserify({
entries: './common/browserify.js',
entries: './website/common/browserify.js',
debug: true,
transform: [[babel, { compact: false }]],
});
@@ -23,9 +23,9 @@ gulp.task('browserify', function () {
this.emit('end');
})
.pipe(sourcemaps.write('./'))
.pipe(gulp.dest('./common/dist/scripts/'));
.pipe(gulp.dest('./website/client-old/js/'));
});
gulp.task('browserify:watch', () => {
gulp.watch('./common/script/**/*.js', ['browserify']);
gulp.watch('./website/common/script/**/*.js', ['browserify']);
});
+5 -5
View File
@@ -18,22 +18,22 @@ gulp.task('build:src', () => {
});
gulp.task('build:common', () => {
return gulp.src('common/script/**/*.js')
return gulp.src('website/common/script/**/*.js')
.pipe(babel())
.pipe(gulp.dest('common/transpiled-babel/'));
.pipe(gulp.dest('website/common/transpiled-babel/'));
});
gulp.task('build:server', ['build:src', 'build:common']);
gulp.task('build:dev', ['browserify', 'prepare:staticNewStuff'], (done) => {
gulp.task('build:dev', ['browserify', 'prepare:staticNewStuff', 'semantic-ui'], (done) => {
gulp.start('grunt-build:dev', done);
});
gulp.task('build:dev:watch', ['build:dev'], () => {
gulp.watch(['website/client/**/*.styl', 'common/script/*']);
gulp.watch(['website/client-old/**/*.styl', 'website/common/script/*']);
});
gulp.task('build:prod', ['browserify', 'build:server', 'prepare:staticNewStuff'], (done) => {
gulp.task('build:prod', ['browserify', 'build:server', 'prepare:staticNewStuff', 'semantic-ui'], (done) => {
runSequence(
'grunt-build:prod',
'apidoc',
@@ -10,11 +10,11 @@ let improveRepl = (context) => {
// Let "exit" and "quit" terminate the console
['exit', 'quit'].forEach((term) => {
Object.defineProperty(context, term, { get() { process.exit(); }});
Object.defineProperty(context, term, { get () { process.exit(); }});
});
// "clear" clears the screen
Object.defineProperty(context, 'clear', { get() {
Object.defineProperty(context, 'clear', { get () {
process.stdout.write('\u001B[2J\u001B[0;0f');
}});
@@ -25,13 +25,13 @@ let improveRepl = (context) => {
var isProd = nconf.get('NODE_ENV') === 'production';
var mongooseOptions = !isProd ? {} : {
replset: { socketOptions: { keepAlive: 1, connectTimeoutMS: 30000 } },
server: { socketOptions: { keepAlive: 1, connectTimeoutMS: 30000 } }
server: { socketOptions: { keepAlive: 1, connectTimeoutMS: 30000 } },
};
autoinc.init(
mongoose.connect(
nconf.get('NODE_DB_URI'),
mongooseOptions,
function(err) {
function (err) {
if (err) throw err;
logger.info('Connected with Mongoose');
}
@@ -42,6 +42,6 @@ let improveRepl = (context) => {
gulp.task('console', (cb) => {
improveRepl(repl.start({
prompt: 'Habitica > '
prompt: 'Habitica > ',
}).context);
});
@@ -4,7 +4,7 @@ import {writeFileSync} from 'fs';
gulp.task('prepare:staticNewStuff', () => {
writeFileSync(
'./website/client/new-stuff.html',
'./website/client-old/new-stuff.html',
jade.compileFile('./website/views/shared/new-stuff.jade')()
);
});

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